Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

raonibs

set/getId() em diversas classes - Duplicação x Acoplamento

Recommended Posts

Tenho usado uma superclasse abstrata que fornece os métodos setId() e getId() já implementado para as classes filhas, isso não esta me cheirando muito bem mas por outro lado se desacoplo essas classes passo a ter duplicação de código, são mais de 20 classes em meu sistema que precisam destes métodos. Gostaria da opinião de vocês sobre manter ou não essa superclasse.

Compartilhar este post


Link para o post
Compartilhar em outros sites

As classes concretas que irão herdar dessa classe abstrata são o que? Entidades do seu domínio, certo?

Mas entenda que entidades de um domínio não tem nada a ver com as tabelas do banco de dados. Na verdade, algumas são tabelas no seu banco de dados, porém outra talvez não sejam. Mas de qualquer forma, uma Entity é o objeto que possui uma identidade.

 

Esse tipo de método - getter/setter de atributos de tabelas de bancos de dados -, mesmo existindo em muitas entidades de seu negócio não deveriam ficar em uma classe abstrata.

Por exemplo, o ID de uma entidade é relevante para ela - a entidade é responsável por ele e não outra - portanto deve ficar nela.

 

Se você está fazendo isso você terá um problema em camadas mais altas da sua arquitetura.

 

 

Outra coisa, lendo isso, posso perceber que você está colando objetos que representam tabelas do banco de dados como objetos Model. Isso está errado. Model é uma camada e não uma classe. Ou seja, na sua camada Model você possui suas regras de negócio, data mappers e services.



... isso não esta me cheirando muito bem ... são mais de 20 classes em meu sistema que precisam destes métodos.

 

Como disse, aparentemente você está colocando classes que representam suas tabelas no banco de dados dentro do domínio do negócio. Se for isso, você está misturando as coisas. Você deve separar regras de negócio (Domain Model) da representação do banco de dados, apesar de estarem na mesma camada, a Model.

 

Então, essas mais de 20 classes não devem se misturar ao seu Domain Model.

 

Como no banco de dados todas elas tem um ID - todas tem né? Se não já temos mais um erro na sua abstração atual, pois você iria estender essa classe para tabelas que não possuem ID futuramente - então todas devem implementar getter/setter para o ID por exemplo.

 

Não sei se estou sendo claro. Qualquer coisa avise. E caso tenha falado alguma besteira alguém me corrija.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Maykonn, mais claro impossível, obrigado pelas dicas. Essa em especial vai me ajudar muito:

 

 

Como disse, aparentemente você está colocando classes que representam suas tabelas no banco de dados dentro do domínio do negócio. Se for isso, você está misturando as coisas. Você deve separar regras de negócio (Domain Model) da representação do banco de dados, apesar de estarem na mesma camada, a Model.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.