1
resposta

Dúvida sobre código excessivo

Eu entendo a necessidade de retirar a complexidade do controller e passar para a classe NegociacaoService. Contudo, criamos 4 métodos adicionais na classe NegociacaoService com código bastante semelhante um ao outro e 3 deles nada mais fazem além de ser uma ponte para a chamada ao DAO.

Não seria mais interessante ter um atributo no Controller como:

 this._dao = ConnectionFactory
            .getConnection()
            .then(connection => new NegociacaoDao(connection));

E nos métodos chamar o dao diretamente com this._dao.then(dao => dao.adiciona(negociacao)), this._dao.then(dao => dao.listaTodos()), this._dao.then(dao => dao.apagaTodos()). Outra coisa que me parece desnecessária é a criação do método importa() no NegociaçãoService, visto que já temos o método obterNegociacoes() que pode ser adaptado para englobar a parte que foi retirada do controller, apenas colocando a listaAtual como parâmetro e encadeando o then que estava no controller.

São dúvidas vindas da inexperiência, pois não sei quando vale a pena ser mais verboso para aumentar a clareza e semântica.

1 resposta

A questão maior nem é o aumento da clareza e semântica, mas a separação de responsabilidades e o desacoplamento do código. Quando vc não utiliza camadas bem definidas, separando regras de negócios de detalhes como infraestrutas, banco de dados, etc, seu código fica muito acoplado, e pequenas mudanças em uma parte podem impactar em todo o sistema.

Por exemplo, uma alteração no DAO, significaria mudar todo lugar em que ela é chamada, controllers, serviços models, etc, caso não utilize camadas bem definidas. Além dessa separação em camadas existem outras técnicas como a inversão de dependência, por exemplo, para minimizar esses efeitos.

Em sistemas pequenas pode não parecer muito vantajoso mas conforme for crescendo a manutenção vai ficando extremamente difícil caso não utilize padrões como estes.