Muito tem se falado no grupo sobre DDD, Repository, Domain Model, etc.
Contudo estou tendo muita dificuldade para tornar estes conceitos práticos, utilizando JavaEE.
Por exemplo:
Quem orquestra os objetos de domínio é uma ServiceLayer, no meu caso um Stateful ou Stateless do Seam.
Meu DomainModel é constituído de Entitys(Objetos com identidade) com lógicas de negócio além obviamente de seus atributos :arrow: no meu caso ele é uma classe JPA anotada com @Entity.
@Entity
@Name("user")
public class User implements Serializable {
...
}
Na maioria das vezes as lógicas neles contidas precisam de um acesso a banco, então eles levam um (ou varios) repository consigo… como atributo da classe ou dentro do próprio método.
@Entity
@Name("user")
public class User implements Serializable {
@Transient
RepositoryUser repositoryUser;
...
}
Então começam alguns problemas. Meu Entity deveria receber injeção deste repository… porém como o Entity é carregado por JPA, eu não consigo injetar nenhum objeto nem por @In do Seam nem mesmo por Spring.
@Entity
@Name("user")
public class User implements Serializable {
//nao funciona a Injecao pq eh em entity
@In
@Transient
RepositoryUser repositoryUser;
...
}
Uma solução seria fazer com que a ServiceLayer enviasse por “set” um repository para o Entity. Mas o código do Service iria ficar poluido, tendo um repository que ele nem faz uso, só instancia para o entity. Toda vez que fosse utilizar uma lógica de negócio do entity que utiliza acesso a banco, teria que minha outra camada setar o repository pra ele.
/*A ServiceLayer*/
@Stateless
@Name("authenticator")
public class AuthenticatorService implements Authenticator{
@In(create=true)
@Out
User user;
@In
private RepositoryUser repositoryuser;
public boolean authenticate(){
//setando porcamente o repositorio
user.setRepository(repositoryuser);
user.authByNameAndPass();
...
}
}
Qual seria uma outra solução que poderia ser adotada? Mesmo com o advento do JavaEE 5 com tantos frameworks de D.I. vou ter que utilizar ServiceLocator para localizar Repository nos entitys?
[]´s