Boa tarde!
Antes de mais nada, li e reli os tópicos de DDD do fórum. Aprendi muita coisa mas ainda restam muitas dúvidas. Talvez por eu somente estudar e não aplicar os conceitos no cotidiano. Infelizmente onde eu trabalho nós aplicamos metodologias como POG e XGH (Extreme Go Horse - Quem não conhece google it…rs).
Vou colocar resumidamente o que eu entendi a respeito do DDD e em seguida postar as dúvidas.
DDD é uma forma de pensar, um conceito para resolver um problema de forma Orientada a Objetos. Poderia utlizar todos os padrões recomendados para a pratica de DDD sem ainda estar usando DDD. A ideia basica é isolar o que é negócio de infraestutura e aplicação.
a “Grosso modo” seria um modelo de objetos interconectados, que são capazes de abstrair e resolver um problema, são facilmente desacoplados e testados, e não enxergam nada alem de negocio, nao sabem como seu estado é armazenado e nem como será apresentado.
Para chegar nesse objetivo usamos alguns padrões.
[list]Repository[/list]
[list]Service[/list]
[list]Factories[/list]
etc…
pergunta número um…
aproveitando o exemplo de um outro topico…
Fornecedor fornecedor = ...;
List contas = dao.carregaContasPagasDesde1999(fornecedor);
Ou:
Fornecedor fornecedor = ...;
List contas = fornecedor.getContasPagasDesde1999()
a segunda opção me parece muito mais OO, porém para fazer esse metodo teria que seguir algumas premissas: O metodo deveria ser uma ação válida dentro do contexto do negócio para aquela entidade. Certo?
-
Se eu tivesse que fazer um método que trouxesse dados mais complexos, tendo que resgatar dados de diversas entidades… isso caberia muito melhor a um service? ou até mesmo pesquisas muito complexas?
-
Em uma operação para salvar um fornecedor
interface FornecedorRepository {
void add(Fornecedor f);
}
- para que o metodo add do repositorio de fornecedor funcione a contento, deveria salvar nao so o fornecedor, mas tbm seus agregattes? como fazer isso?
poderia ser assim:
class FornecedorRepositoryImpl implements FornecedorRepository {
private DocumentoRepository dr;
public void add(Fornecedor f ) {
new FornecedorDAO().salvar(f);
dr.add(fornecedor.getDocumento());
}
-
Se eu precisar de controle transacional, onde coloco? em um service?
-
é correto fazer isso?
Class Fornecedor {
private FornecedorRepository fr;
private ContaRepository cr;
public List<Conta> getContasPagas(Date since) {
return cr.getContasPagas(since);
}
- Se sim, como injeto os repositórios dentro das entidades…???
tenho muitas outras perguntas, mas vou ficar com essas por enquanto…
Obrigado pela colaboração.
[…]s