Não é mais uma discussão sem fim sobre repositórios. Acho.
É o seguinte, atualmente estou lendo dois livros, um é o EJB 3 In Action e o outro é o Applying DDD and Patterns. E aí surgiu uma dúvida: é possível ter DDD com EJB3? O livro do EJB diz que sim, mas não explica muito. O livro do DDD é com exemplos em C#, portanto, mesmo eu não tendo lido tudo, sei que não vai falar sobre EJBs.
Pra explicar melhor, um exemplo. Imagine um site de venda de produtos muambados, tipo Mercado Livre. Lá, a oferta de um novo produto pelos vendedores pode ser feita com o seguinte código:
Produto p = new Produto()
.descricao("iPhone 16GB")
.valor(new BigDecimal("1700.00"))
.quantidade(100);
vendedor.oferta(p);
Tudo bastante OO.
Porém, como vendedor é um entity bean vindo remotamente, eu devo cercar o código acima pra ficar mais ou menos assim:
// aqui, mercadoService é uma variável cujo tipo é uma interface de um EJB 3
// o método procuraVendedorPeloId, no outro nó, vai buscar um vendedor na base de dados
Vendedor vendedor = mercadoService.procuraVendedorPeloId(15383242);
Produto p = new Produto()
.descricao("iPhone 16GB")
.valor(new BigDecimal("1700.00"))
.quantidade(100);
// as alterações de estado do vendedor (e, possivelmente, produto) são de conhecimento
// apenas local, no lado remoto não aconteceu nada
vendedor.oferta(p);
// mando as alterações para o lado remoto, com o risco de uma transação não-ACID
mercadoService.salva(vendedor);
Achei super estranho a primeira e a última linha do código acima, porque parece meio procedural. Aí a dúvida: isso deixou de ser DDD? Se sim, existem formas de se contornar isso (além da opção de se desistir de EJB3)?