Olá !
Bom, comecei a ler um livro sobre engenharia de software, e um dos princípios que me chamaram atenção foi o acoplamento ou ortogonalidade entre componentes. Pois bem, recentemente no estágio eu me deparei com a seguinte situação: Suponha que eu tenho um sistema, com os modelos Vendedor e Produto.
Caso exista algum vendedor no banco de dados, o cadastro de um novo produto é aceito, e ao clicar em no link Cadastrar Novo Produto, o usuário é redirecionado para a tela /cadastrar_produto.
Caso não exista nenhum vendedor no banco de dados, o cadastro do produto não é aceito, e ao clicar no link Cadastrar Novo Produto, o usuário não é redirecionado para a tela /cadastrar_produto, e sim para a tela /cadastrar_vendedor com uma mensagem do tipo “Cadastre primeiro um vendedor, para depois cadastrar um produto”.
Considerando-se o uso do padrão MVC, eu penso que nessa situação a camada View sabe mais do que deveria sobre a camada Model, já que o fluxo de telas e consequentemente o comportamento do sistema vai variar em função da existência ou não de algum registro especifico em uma tabela do banco de dados.
Então, nesse caso, eu realmente tenho uma camada sabendo mais do que deveria sobre a outra ? E se tenho, isso pode ser caracterizado como acoplamento ?
Obrigado !
Luis, o fato de um produto poder ou não ser cadastrado é uma regra de negócio e tem que ser implementada na camada de modelo. Em uma arquitetura de camadas, a view não conhece essas regras. Esse fluxo de telas deve ser implementada por classes controladoras e não pela view. A função da view é somente mostrar dados ao usuário e não processá-los.
Olá paulo, obrigado pela resposta. Sem duvida a regra de negócio se coloca no modelo, e a do fluxo no controlador. Porém a minha duvida é a seguinte, o fato do fluxo variar em função da existência ou não de algum Vendedor cadastrado, pode caracterizar um acoplamento entre duas camadas diferentes ?
Porque, um outro modo de fazer o que o sistema faz, seria de fato exibir a tela referente a rota /cadastrar_produto com alguma mensagem do tipo “Voce nao pode cadastrar um produto sem que exista algum vendedor no banco”, sem redirecionar para a rota de /cadastrar_vendedor. Nesse caso, o fluxo do sistema iria variar sem que ele tivesse conhecimento do que existe ou deixa de existir no Model.
O ponto é que, caso o fluxo varie em função ou não da existência de um Vendedor, é como se o fluxo soubesse mais do que deveria sobre o Model, e isso pra mim pode caracterizar um grau de acoplamento entre duas camadas. Faz sentido pensar dessa forma ?
Obrigado !