4
respostas

Como trabalhar com customizações

Boa tarde. Estou desenvolvendo um sistema que poderá se tornar um ERP. Já está funcional para algumas funções (cadastros e financeiro). Na branch de desenvolvimento já tem outros módulos.

Acontece que o mesmo sistema é usado por clientes diferentes. Gostaria de saber qual a melhor forma de criar customizações. Pois existem features que só existirão em determinados clientes.

Pensei em separar por branches, mas logo desisti. Gostaria de uma forma mais prática de fazer customizações, pois o sistema em geral ainda receberá atualizações comuns a todos os clientes.

4 respostas

Olá Fábio, Tudo bem?

Eu trabalho com MVC, mas mais especificamente com Laravel, o que te aconselho porque é um package feito para MVC no PHP, lá temos um jeito simples de fazer isso pelo menos, que é adicionar uma coluna "role" a sua base de usuários e assim pode colocar no inicio da view um if para a caso ele seja da role que precisa retorna a view, caso não ele é retornado a home ou uma página falando que o usuário não tem permissão de acessar a página. Vou te deixar um vídeo de referencia para consultar de uma forma melhor!

https://www.youtube.com/watch?v=oOLKwPfMIYU&ab_channel=LaravelDaily

Boa tarde Eduardo! Tudo certo, e vc?

Eu uso com MVC também, só que sem framework.

Eu até já usei o Laravel. Ele já me ajudou algumas vezes.

Mas no meu caso, o comportamento é diferente em cada caso.

Às vezes a customização é relacionada na regra de negócios. Por exemplo, um cliente insere os números de requisição manualmente. Já em outro, o número de requisição é automático, com base na ordem e pedido de compra, com outras checagens associadas.

Um cliente tem módulos de ordens e pedidos de compra e com isso gera as requisições. Já o outro só tem um input text lá que ele coloca a requisição manualmente.

Aí não sei se o Laravel me ajudaria.

Já recebi o conselho de criar componentes no PHP. Não sei se é o que preciso.

Opa, Flavio. Isso é uma aplicação multi-tenant.

Você pode ter no banco de dados as informações de quais funcionalidades cada cliente tem acesso. Aí antes de permitir o acesso a determinada URL, módulo ou o que for, você verifica se o cliente logado tem esse acesso. :-D

Vou tentar complementar a resposta do Vinicios, tente focar seu desenvolvimento orientado a interfaces, assim você consegue criar classes no PHP que implementam as regras de negocio para cada cliente. Vou tentar exemplificar... Suponhamos que você emita boletos e tenha as seguintes classes: interface EmiteBoleto, BoletoBancoBrasil implements EmiteBoleto, BoletoBancoCaixa implements EmiteBoleto

Na sua Model, você tera uma outra classe chamada EmitirBoleto

class EmitirBoleto
{
    private EmiteBoleto $boleto;
     public function __construct(EmiteBoleto $boleto){
        $this->boleto = $boleto;
    }
    public gerar()
    {
        reuturn $this->boleto->contruirBoleto();
    }
}

$boletoBancoBrasil = new BoletoBancoBrasil;
$boletoCaixa = new BoletoBancoCaixa;

$boleto = (new EmitirBoleto($boletoBancoBrasil))->gerar();
$boleto = (new EmitirBoleto($boletoCaixa))->gerar();

utilizando dessa abordagem creio que vai ficar mais fácil você escalar seu código, já que disse que ele pode vir a se tornar um ERP