[quote=cv]Nao, Joao… Departamento eh um objeto do seu dominio. Assim como tem getMedia():BigDecimal, tem getResponsavel():Funcionario, e tem getFuncionarios():Set…
Ele nao eh um VO, pq ele nao eh um objeto que serve so pra ser estuprado por um DAO, que manda pro controller fazer autopsia. Ele (oooooh, vejam so!) contem as regras de negocio relacionada a departamentos! :)[/quote]
Então segue o dilema…
Eu deveria ter algo como
Negócio <-> Usuário
Usuário neste caso pode ser visto como um objeto também.
No entanto,
Meu objetos de negócios não sabem nada sobre banco de dados. Para isto, tem um AjudanteParaBd que sabe como “guardar” os objetos num banco de dados.
BD <-> AjudanteParaBD <-> Objetos <-> Usuário
Além disso, o usuário quer se conectar remotamente via http, mas meus objetos de negócio (por exemplo Departamento) nunca ouviram falar em "h-t-t- o que? ". Para existe um Servidor Web, que dá conta de converter o protocolo web em classes wrappers:
BD <-> AjudanteParaBD <-> Objetos <-> Servidor Web<-> Usuário
Mas, num dado momento um objeto terá que conhecer as regras de negócio e WebServer ou AjudanteParaBd.
Qual a prosposta para resolver este problema, tentando manter a clareza ?
Obs1: veja bem, eu to nem ai para performance e,
obs2: esta pergunta não é retórica.
De uma forma ou de outra, teremos que utilizar classes feias, que tem alguma coisa a ver com o negócio e com os problemas de tecnologia.
Se isto já não é tosco o suficiente, poderíamos querer uma série de coisas como escabilidade, segurança, transação, “etc e etc”, que seriam resolvidos de que maneira ???
E se você tiver utilizando ejbs para resolver o problema de “etc e etc”, mesmo que seja numa mesma máquina terá que utilizar um “objeto que não faz nada” (tipo um DTO), porque Departamento não sabe como notificar um funcionário sobre seu bônus, sem fazer uma chamada de jndi para algum serviço (banco de dados, ejb, etc), que altere o estado de alguma instância.
Talvez, você possa ter um Objeto de negócio com vários métodos abstratos, implementados por um objeto concreto que tenha as regras e os conhecimentos tecnológicos… Num sei…
Mas enfim, ejb != OO. E java também não é 100% OO. Se quiser algo bonito mesmo, use Smalltalk. E viva o GUS.