Modelo Anêmico é realmente ruim?  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
Nykolas Lima
Virtual Machine Man
[Avatar]

Membro desde: 07/07/2008 13:10:41
Mensagens: 606
Offline

rogelgarcia wrote:Acho que tá havendo um mal entendido aqui..

No post do sergiotaborda é dito que os objetos fantoche.. como a classe Endereco que citei.. sao apenas isso fantoche.. e que isso é o correto.. porque a responsabilidade delas é apenas ser repositorio de dados

Aí os defensores do modelo rico.. dizem que as classes nao podem ser só fantoches.. que devemos evitar o modelo anemico...


E o sergiotaborda como outros são contra o modelo anemico...

O que voces chamam de modelo anemico???


Acho que você não entendeu direito.

O modelo anêmico é quando você separa a lógica e as propriedades de uma entidade em classes diferentes.
Porque? Porque o conceito de objeto é propriedades + funcionalidades, sendo assim separar isso em duas classes vai contra o conceito de orientação a objeto.

O que o sergio defende é de que se o objeto não tem nenhuma funcionalidade (regra de negócio), você não precisa inserir alguma só para dizer que tem.

E se um objeto só tem o proposito de armazenar dados que assim seja, isso não torna o modelo anêmico.

Entendeu?

This message was edited 1 time. Last update was at 07/04/2010 20:59:10


Blog: http://nykolaslima.wordpress.com
[WWW]
mochuara
GUJ Master
[Avatar]
Membro desde: 20/05/2009 11:21:32
Mensagens: 1776
Offline

O que é VO?
rogelgarcia
GUJ Master
[Avatar]

Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline

Sim.. entendi isso.. e é o que eu defendo tb...

Só que o que eu tinha como conceito de modelo anemico.. é objetos com apenas getters e setters...
Os objetos com getters e setters.. são os objetos que o sergio defente...



This message was edited 1 time. Last update was at 07/04/2010 21:18:57


Rógel Garcia, criador do framework NEXT

http://www.nextframework.org
rogelgarcia
GUJ Master
[Avatar]

Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline

VO Value Object.. é a entidade por exemplo.. a classe Endereco

Rógel Garcia, criador do framework NEXT

http://www.nextframework.org
mochuara
GUJ Master
[Avatar]
Membro desde: 20/05/2009 11:21:32
Mensagens: 1776
Offline

Frango wrote:
O que o sergio defende é de que se o objeto não tem nenhuma funcionalidade (regra de negócio), você não precisa inserir alguma só para dizer que tem.

E se um objeto só tem o proposito de armazenar dados que assim seja, isso não torna o modelo anêmico.

Entendeu?


Independente de ser modelo anemico ou nao, se um objeto não tem funcionalidade (ou seja, não troca mensagens com outros objetos), qual motivo da sua existencia? Pra mim isso não é um bom sinal de design OO.
rogelgarcia
GUJ Master
[Avatar]

Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline

mochuara wrote:
Frango wrote:
O que o sergio defende é de que se o objeto não tem nenhuma funcionalidade (regra de negócio), você não precisa inserir alguma só para dizer que tem.

E se um objeto só tem o proposito de armazenar dados que assim seja, isso não torna o modelo anêmico.

Entendeu?


Independente de ser modelo anemico ou nao, se um objeto não tem funcionalidade (ou seja, não troca mensagens com outros objetos), qual motivo da sua existencia? Pra mim isso não é um bom sinal de design OO.


Ele existe para guardar dados...
na classe Endereco.. rua cep bairro ... etc

Rógel Garcia, criador do framework NEXT

http://www.nextframework.org
rogelgarcia
GUJ Master
[Avatar]

Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline

Andei pesquisando aqui na internet e achei alguns posts sobre o Anemic Domain Model, para ver se eu entendia realmente o que queria dizer...

Esse artigo mostra modelos de código
http://vitamic.wordpress.com/2007/01/04/anemic-domain-model-illustrated/

O que eu defendia, é que não há nada de errado em ter classes com apenas getters e setters... ou seja, do meu ponto de vista esse anemic model (classes só com getters e setters) não é um problema..

O sergio também concorda que pode haver esse tipo de objetos com apenas getters e setters (conforme artigo em seu blog)..

Agora os que não gostam do anemic model, querem colocar as funcionalidades no modelo, por exemplo o método salvar... como até dito no artigo do link que postei...

O que eu considero errado...


Temos então duas definições....

> Anemic Model, é uma classe que deveria possuir funcionalidades (como getIdade() em PessoaFisica) mas essas funcionalidades estão em outra classe... OK Concordo que nesse caso o Anemic Model é ruim...

> Tem gente que defende que o método salvar deve ficar no Modelo, alegando que é Anemic Model se o salvar ficar em outra classe... Não concordo.. e por isso disse que anemic model não é ruim...



Então, uma classe com apenas getters e setters, é anemic model? Como por exemplo a classe Endereco, que nao tem que fazer mais nada, a não ser guardar as informacoes do endereço....

E os que defendem que o método salvar deve estar no modelo? Chamam modelos sem esse método de anemic model?

Rógel Garcia, criador do framework NEXT

http://www.nextframework.org
rogelgarcia
GUJ Master
[Avatar]

Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline

Considerando que há essa divergência entre os Anemic Models... eu acho que existem "níveis de anemia" e o que cada um considera anêmico varia nesses niveis..

(vou simplificar o código para ficar mais fácil entender... nao vou colocar os getters e setters tb nao)

Anemia 0 - Absolutamente nenhuma funcionalidade no Modelo...


Anemia 1 - Funcionalidades apenas pertinentes ao modelo (onde o modelo resolve por si só o problema)



Anemia 2 - Funcionalidades apenas pertinentes ao modelo independente se precisa de outras informacoes, ou objetos...



Anemia 3 - Funcionalidades pertinentes ao modelo mas independente de sua responsabilidade



Anemia 4 - Funcionalidades pertinentes ao modelo mas independente de sua responsabilidade (nível extremo, igual ao do framework do carinha)



Alguns vão dizer que o anemic model é o que é exemplificado em 0, 1, 2, 3 ou 4...

Varia de acordo com a interpretação... o que eu considerava que seria anemic model ... seria o exemplo 0 ou 1...

No caso eu recomendaria fazer como no exemplo 1... Eu considero como anemic model (de acordo com o que eu já ouvi falar) .. mas não acho ruim... considero ser a melhor opção....

Vemos que o excesso de zelo para se evitar o anemic model, pode piorar o modelo, trazendo para ele responsabilidades que não são pertinentes...

This message was edited 1 time. Last update was at 07/04/2010 22:09:38


Rógel Garcia, criador do framework NEXT

http://www.nextframework.org
aconstantino
Virtual Machine Man
[Avatar]

Membro desde: 14/09/2002 16:37:24
Mensagens: 698
Offline

rogelgarcia wrote:

Alguns vão dizer que o anemic model é o que é exemplificado em 0, 1, 2, 3 ou 4...

Varia de acordo com a interpretação... o que eu considerava que seria anemic model ... seria o exemplo 0 ou 1...

No caso eu recomendaria fazer como no exemplo 1... Eu considero como anemic model (de acordo com o que eu já ouvi falar) .. mas não acho ruim... considero ser a melhor opção....

Vemos que o excesso de zelo para se evitar o anemic model, pode piorar o modelo, trazendo para ele responsabilidades que não são pertinentes...


eu tenho a mesma visão do roel

Uma dúvida que tenho.. eh assim, no modelo 'rico', se eu quisesse re-utulizar meu domain model em outra aplicacao seria possivel? Pq tipo assim.. eu tenho um projeto que estou desenvolvendo a algum tempo onde eu separei o dominio em um jar separado... esse jar pertence exclusivamente a minha empresa... nela eu tenho os mais variados tipos de classes, desde pessoa até coisas especificas de outros projetos.. o que as diferencia é apenas o pacote... por exemplo... tenho com.teste.domain.Pessoa -> com.teste.model.PessoaFisica -> com.teste.cliente1.model.Cliente.. como seria isso no modelo rico??

Outra coisa... se eu quiser mudar a camada de persistencia no modelo 'rico', simplesmente alterando o jar app_hibernate para app_jdbc da minha aplicação é possível???

Outra... se eu quiser re-utilizar meu jar de domain e meu jar de persistence ou model em outra aplicação é possível???

This message was edited 1 time. Last update was at 07/04/2010 22:46:05

[Email] [WWW] [MSN]
faq
JavaChild
[Avatar]

Membro desde: 03/08/2005 15:06:13
Mensagens: 147
Offline

@dohko

Uma dúvida que tenho.. eh assim, no modelo 'rico', se eu quisesse re-utulizar meu domain model em outra aplicacao seria possivel? Pq tipo assim.. eu tenho um projeto que estou desenvolvendo a algum tempo onde eu separei o dominio em um jar separado... esse jar pertence exclusivamente a minha empresa... nela eu tenho os mais variados tipos de classes, desde pessoa até coisas especificas de outros projetos.. o que as diferencia é apenas o pacote... por exemplo... tenho com.teste.domain.Pessoa -> com.teste.model.PessoaFisica -> com.teste.cliente1.model.Cliente.. como seria isso no modelo rico??


Sinceramente, eu não tenho o sonho de reaproveitar componentes de domínio. Ai você pensa: "mas o dominio do aplicativo A se parece com o do aplicativo B", talvez seja o caso de refatorar ambos aplicativos para A, B e C, com C contendo as partes comuns. Você pode até generalizar/abstrair os modelos do domínio, o resultado vai ser ou alguma coisa pouco útil ou um trambolho complexo com interfaces gigantes e não relacionadas ao dominio. Em todo caso vale a pena testar, a minha experiência diz que fazer isso não é bom, é mais prático reescrever.

Adicionando: dá uma olhada nesse link http://en.wikipedia.org/wiki/Subject-oriented_programming

Pergunta: com.teste.domain.Pessoa -> com.teste.model.PessoaFisica -> com.teste.cliente1.model.Cliente o que é isso? Herança? Esses "teste" no nome da classe são testes (ex. unitário) ou é só um exemplo de nome?

Como seria no modelo rico?
O que eu falei até aqui não diz respeito a modelo rico ou modelo anêmico, tanto faz.

Outra coisa... se eu quiser mudar a camada de persistencia no modelo 'rico', simplesmente alterando o jar app_hibernate para app_jdbc da minha aplicação é possível???


Sim, tanto no modelo rico quanto no modelo anêmico é possível utilizar abstrações e "camuflar" o que tem por baixo.

Outra... se eu quiser re-utilizar meu jar de domain e meu jar de persistence ou model em outra aplicação é possível???

Pelo visto você anda tendo um bom reaproveitamento com os modelos anêmicos / semi-anêmicos / não anêmicos (ou outro). No que de fato consiste esse reaproveitamento? Importar um jar , subir um schema (de banco) e realizar uma série de testes automáticos?

This message was edited 1 time. Last update was at 07/04/2010 23:35:17


"There are worse things than being alone" Charles Bukowski
mochuara
GUJ Master
[Avatar]
Membro desde: 20/05/2009 11:21:32
Mensagens: 1776
Offline

rogelgarcia wrote:Considerando que há essa divergência entre os Anemic Models... eu acho que existem "níveis de anemia" e o que cada um considera anêmico varia nesses niveis..

(vou simplificar o código para ficar mais fácil entender... nao vou colocar os getters e setters tb nao)

Anemia 0 - Absolutamente nenhuma funcionalidade no Modelo...


Anemia 1 - Funcionalidades apenas pertinentes ao modelo (onde o modelo resolve por si só o problema)



Anemia 2 - Funcionalidades apenas pertinentes ao modelo independente se precisa de outras informacoes, ou objetos...



Anemia 3 - Funcionalidades pertinentes ao modelo mas independente de sua responsabilidade



Anemia 4 - Funcionalidades pertinentes ao modelo mas independente de sua responsabilidade (nível extremo, igual ao do framework do carinha)



Alguns vão dizer que o anemic model é o que é exemplificado em 0, 1, 2, 3 ou 4...

Varia de acordo com a interpretação... o que eu considerava que seria anemic model ... seria o exemplo 0 ou 1...

No caso eu recomendaria fazer como no exemplo 1... Eu considero como anemic model (de acordo com o que eu já ouvi falar) .. mas não acho ruim... considero ser a melhor opção....

Vemos que o excesso de zelo para se evitar o anemic model, pode piorar o modelo, trazendo para ele responsabilidades que não são pertinentes...


É por causa desse tipo de discussão inutil que estou de saco cheio de desenvolver em Java. Esse tipo de coisa simplesmente não existe em outras linguagens, e por isso elas são geralmente chamadas de mais produtivas.
rogelgarcia
GUJ Master
[Avatar]

Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline

É.. dá pra ver que vc tá nervoso mesmo.. heheheheh

Mas essa discussão é independente da linguagem...


Rógel Garcia, criador do framework NEXT

http://www.nextframework.org
mochuara
GUJ Master
[Avatar]
Membro desde: 20/05/2009 11:21:32
Mensagens: 1776
Offline

rogelgarcia wrote:É.. dá pra ver que vc tá nervoso mesmo.. heheheheh


Que nada, esse lance de anemia 0, anemia 1, anemia 2, foi até engraçado!
rogelgarcia
GUJ Master
[Avatar]

Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline

Eu ia colocar um com vitamina B12 pra ver se melhorava.. ehhehe

Rógel Garcia, criador do framework NEXT

http://www.nextframework.org
mochuara
GUJ Master
[Avatar]
Membro desde: 20/05/2009 11:21:32
Mensagens: 1776
Offline

rogelgarcia wrote:Eu ia colocar um com vitamina B12 pra ver se melhorava.. ehhehe


http://guj.com.br/posts/list/30/203206.java#1029177
 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team