Qual seria a "melhor" maneira para organizar as classes em um projeto?
9 respostas
lauro91
Olá , gostaria de opiniões sobre qual a melhor organização das classes em um projeto. Estou com dúvidas basicamente na classe que abriga o psvm ( public static void main).
Por exemplo: Em um projeto com classe produto , classe estoque, e classe principal (psvm), organizaria da seguinte maneira:
Classe produto: atributos e método get e set.
Classe estoque: atributos , no caso desse projeto, também um array de objetos Produto, métodos get e set, e os métodos de adição ao estoque (no array), pesquisa e remoção (do array).
Classe principal: Até então, faço da seguinte maneira:
[b]public class Principal {
publicstaticvoidmain(String[]args){Estoqueestoque=newEstoque();//menuswitch(op){case1://adicionarProduto(estoque) //...}main//aqui entra os metodos que capturam os dados e enviam ao metodo adicionar, remover, pesquisar da classe estoque//ex:publicstaticvoidadicionarProduto(Estoqueestoque){}
classMain{publicstaticvoidmain(String[]args){Estoqueestoque=newEstoque();//lê as entradas ...if(opcao==1){estoque.adicionaProduto(p);}else{estoque.removeProduto(p);}}}
evertonsilvagomesjav
Não seria melhor ele criar uma classe controller e o controller ter os métodos de removerProduto e adicionarProduto?
nel
Pois é. Acho que o Estoque assim como o Produto devem ser um simples POJO.
Pode-se criar uma classe que represente o serviço de manipulação desses POJO´s, no caso, seja para adicionar algo ao estoque, remover produto entre outros.
rmendes08
De maneira nenhuma! Adicionar/Remover produtos de estoque são regras de negócio, elas fazem parte do domínio da aplicação, portanto, eles devem ser colocadas na classe que representa essa entidade do domínio.
Controllers só fazem sentido quando se trabalha com MVC. No caso, o Controller serve para ligar as classe de negócio com uma View específica. Se você acoplar uma regra de negócio em um Controller é praticamente a mesma coisa que acoplar a regra de negócio à View.
lauro91
Pois então, venho fazendo desta forma, colocando as regras de negócio, tais como os métodos adicionar e remover, dentro da classe da qual essas regras fazem parte, porém com uma ressalva, todas as entradas de dados são feitas feitas na classe principal.
rmendes08
Claro, pois assim você pode trocar o seu método de entrada (trocar de console para GUI por exemplo) sem alterar a sua classe de regra de negócios.
nel
Eu, particularmente, entendo que uma classe chamada “Estoque” nada mais é que um POJO (entity, como eu uso JPA).
Ele nada tem além dos famosos getters e setters. Para tal, tenho um DAO e uma camada de serviço. O DAO só é acessado via camada de serviço e a camada de serviço ou é chamada de outra classe da mesma camada ou da camada de view, supondo JSF, seria o Managed Bean.
Acredito que fique mais claro e melhor separada as funções nesse formato, assim como sua organização.
Mas é uma opinião minha, obviamente.
evertonsilvagomesjav
nel:
Eu, particularmente, entendo que uma classe chamada “Estoque” nada mais é que um POJO (entity, como eu uso JPA).
Ele nada tem além dos famosos getters e setters. Para tal, tenho um DAO e uma camada de serviço. O DAO só é acessado via camada de serviço e a camada de serviço ou é chamada de outra classe da mesma camada ou da camada de view, supondo JSF, seria o Managed Bean.
Acredito que fique mais claro e melhor separada as funções nesse formato, assim como sua organização.
Mas é uma opinião minha, obviamente.
Eu também trabalho dessa forma. No caso a camada de serviço eu utilizo EJB
nel
evertonsilvagomesjava:
nel:
Eu, particularmente, entendo que uma classe chamada “Estoque” nada mais é que um POJO (entity, como eu uso JPA).
Ele nada tem além dos famosos getters e setters. Para tal, tenho um DAO e uma camada de serviço. O DAO só é acessado via camada de serviço e a camada de serviço ou é chamada de outra classe da mesma camada ou da camada de view, supondo JSF, seria o Managed Bean.
Acredito que fique mais claro e melhor separada as funções nesse formato, assim como sua organização.
Mas é uma opinião minha, obviamente.
Eu também trabalho dessa forma. No caso a camada de serviço eu utilizo EJB
Me too. Já cogitei a possibilidade de utilizar o pattern Business Delegate, mas não foi necessário.