[quote=rogelgarcia]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…
class PessoaFisica {
String nome;
Date dataNascimento;
}
class PessoaFisicaBO {
int getIdade(Pessoa p){...}
boolean declarouIR(Pessoa p){
...
// web service para acessar o site da receita federal
}
}
class PessoaFisicaDAO {
void save(PessoaFisica p){...}
}
class PessoaFisicaAction {
void processCrud(request) {...}
}
Anemia 1 - Funcionalidades apenas pertinentes ao modelo (onde o modelo resolve por si só o problema)
class PessoaFisica {
String nome;
Date dataNascimento;
int getIdade(){...} // MÉTODO NO MODELO
}
class PessoaFisicaBO {
boolean declarouIR(Pessoa p){
...
// web service para acessar o site da receita federal
}
}
class PessoaFisicaDAO {
void save(PessoaFisica p){...}
}
class PessoaFisicaAction {
void processCrud(request) {...}
}
Anemia 2 - Funcionalidades apenas pertinentes ao modelo independente se precisa de outras informacoes, ou objetos…
class PessoaFisica {
String nome;
Date dataNascimento;
int getIdade(){...}
boolean declarouIR(){ // MÉTODO NO MODELO
...
// web service para acessar o site da receita federal
}
}
class PessoaFisicaBO {
}
class PessoaFisicaDAO {
void save(PessoaFisica p){...}
}
class PessoaFisicaAction {
void processCrud(request) {...}
}
Anemia 3 - Funcionalidades pertinentes ao modelo mas independente de sua responsabilidade
class PessoaFisica {
String nome;
Date dataNascimento;
int getIdade(){...}
boolean declarouIR(){
...
// web service para acessar o site da receita federal
}
void save(){...}// MÉTODO NO MODELO
}
class PessoaFisicaBO {
}
class PessoaFisicaDAO {
}
class PessoaFisicaAction {
void processCrud(request) {...}
}
Anemia 4 - Funcionalidades pertinentes ao modelo mas independente de sua responsabilidade (nível extremo, igual ao do framework do carinha)
class PessoaFisica {
String nome;
Date dataNascimento;
int getIdade(){...}
boolean declarouIR(){
...
// web service para acessar o site da receita federal
}
void save(){...}
void processCrud(request) {...}// MÉTODO NO MODELO
}
class PessoaFisicaBO {
}
class PessoaFisicaDAO {
}
class PessoaFisicaAction {
}
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…[/quote]
É 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.