Tenho muitos Controllers na minha aplicação. UsuarioController, VendaController, PagamentoController, etc…
Seria uma boa criar um controller genérico? O grando problema que vejo, é que as ações são diferentes em cada classe. Poderia criar uma interface para as ações repetidas, mas as diferentes não vejo muito o que fazer!
Eu particularmente dependendo do caso não faria, você poderia propor em código o que repete e o que não repete explicar com exemplos seria fantástico abre um leque para que os outros tente responder!
de certa forma, sim. é o que os frameworks fazem: criam uma plataforma generica e vc muda quando precisar.
vc precisa organizar o que tem de comum entre os codigos e pensar na hierarquia. por exemplo se todos fazem X, pode fazer sentido criar uma “classe abstrata” que fala sobre fazer X. mas se so metade faz X, então so esses poderiam extender essa classe
Imagine que todas as classes Model precisam de CRUD, essa é a grande repetição nos controllers. Eu tenho em todos eles RequestMappings (usando spring)… para listar todos os registos, editar, deletar, inserir… sendo que, naturalmente, em alguns eu preciso fazer algo a mais… Em Usuario eu preciso enviar senha de acesso (não fica no CRUD), em Pagamento em preciso dar baixa… e por ai vai…
Um controller abstrato ou uma interface com os métodos repetidos e os controllers que possuem seus métodos exclusivos… os implementam por conta própria…
Qual exemplo exatamente de repetição ocorre no seu Controller? Controller só tem que fazer o meio de campo das informações particulares. Operações repetitivas de CRUD devem ser centralizadas em uma classe de acesso a dados, como por exemplo DAO, lá sim você pode ter uma classe base/genérica para centralizar o que for repetitivo em relação a CRUD. Assim como outros recursos genéricos que precisar de infraestrutura devem ficar em uma biblioteca separada. Enfim, depende exatamente de você mostrar o que está repetindo.
javaflex… as operações do crud são feitas no DAO… mas as chamadas e o recebimento das informações do DAO faço no Controller.
Vou te dar um exemplo real da minha aplicação.
A lista de usuários:
1 - A view mostra os usuários numa tabela html …
2 - O Controller faz a chamada ao DAO, recebe uma lista e devolve essa lista para a view…
Essa repetição de ir no DAO pegar uma lista vinda de uma tabela qq do banco de dados e jogar para a view…se repete inumeras vezes na minha aplicação… Mas hoje, tenho uma View, Controller e Dao para Usuarios, uma view, Controller e Dao para Pagamentos, uma view, Controller e Dao para Recebimentos, e por ai vai…
Sei que posso fazer um DAO Genérico…mas a dúvida é se esta abstração também aconteceria para um Controller…
Máximo que vai conseguir é criar um método genérico que de qualquer forma vai ter que chamar e passar o tipo, no final das contas vai trocar uma linha de código por outra linha de código mais engenhosa sendo chamada da classe base.
A duvida sobre DAO generico pode ser resolvida com leitura sobre DDD
Vc tem que pensar no seu modelo de dados. Existe um pattern chamado Repository que parece um DAO mas tem uma semântica melhor.
Ô repositorio surge de um modelo de dados rico. E com polimorfismo/herança/composição vc reusa codigo. Basta pensar nos conceitos e tentar fazer o melhor (demora…)