Sempre que vejo exemplos de código (em livros ou fóruns) utilizando JSF/MVC fico em dúvida sobre a camada do modelo. Será que não esta faltando maiores explicações do que realmente engloba a camada de modelo X boas práticas?
Basicamente: - Geralmente nos códigos que vemos a camada de visualização tem acesso direto ao modelo. Vi em alguns fóruns da Caelum a afirmação de que dar acesso direto ao modelo na visualização não é uma boa prática. - Até então eu não vi exemplos nos cursos onde a camada de modelo "encapsula" as regras de negócio + as entidades, principalmente quando se fala em JSF. Muito pelo contrário, geralmente o que vemos é a camada de visualização acessando (ferindo OO) diretamente as entidades (as quais não possuem regras).
Aí vai as questões: - Se dar acesso ao modelo (a entidade) na visualização não é uma boa prática então como seria a implementação da boa prática?
Supondo que a minha base de dados (relacional) não represente um modelo OO, fatalmente teremos que criar classes que englobam tanto as regras de negócio como também o preenchimento dos atributos (setters) das entidades? (Desmontar o brinquedo para armazená-lo).
Mesmo que a minha base de dados representasse um modelo OO ainda assim entendo que o LivroBean não poderia de maneira alguma utilizar/manipular o livro(entidade) pois ele pode ferir qualquer regra de negócio. Estou certo? Por exemplo o método this.livro.removeAutor(autor) pode possuir uma regra de negócio que somente permite excluir o autor se X + Y for verdadeiro. Porém ainda posso fazer do jeito antigo/errado que seria this.livro.getAutores().remove(autor). Como tratar esta situação (eu poderia alterar getAutores para private)?