DDD – Part 5 – Factories e Repositories

Posted on April 3, 2009

1


FACTORIES

“When creation of an object, or an entire AGGREGATE, becomes complicated or reveals too much
of the internal structure, FACTORIES provide encapsulation”

O livro cita as mesmas fábricas do Design Patterns do GOF, Factory method, abstract factory, builder – Gamma et al.1995.

Um detalhe importante é, pensando na divisão das camadas da aplicação, onde colocar suas factories?
O lugar correto segundo DDD é na própria domain layer:

“Creation of an object can be a major operation in itself, but complex assembly operations do not fit the responsibility of the created objects. Complex object creation is a responsability of the domain layer”

“We are adding elements to the design that do not correspond to anything in the model, but they are nonetheless part of the domain’s layer responsability”

Fábricas em DDD são as mesmas classes normalmente responsáveis pela criação de objetos compilexos, onde é necessário esconder alguma implementação, onde cada operação deve ser atômica e se preocupar caso a criação do objeto falhe, minimizando a dependência e o acoplamento.

Fábricas podem criar Value Objects, que produzem objetos prontos, no formato final, ou Entity factories apenas para os atributos essenciais.

“A program element whose responsability is the creation of other objects is called a FACTORY”

“you create a factory to build something whose details you want to hide”

“…value object factories, the product comes out complete in its final form entity factories tend to takejust the essential attributes required to make a valid aggregate…”

REPOSITORY
Muitas regras no domain model acabam sendo colocadas nas query’s, consequentemente se perdendo da aplicação, os repositórios tenta fazer a transição entre o domain e a camada de persistência.

“transition is the responsibility of REPOSITORY, creation of an instance from stored data is recontitution”

“The REPOSITORY pattern is a simple conceptual framework to encapsulate those solutions and bring back our model focus”

“A REPOSITORY represents all objects of a certain tye as a conceptual set. It acts like a collection, except with more elaborate querying capability”

Repositórios podem representar algo muito próximo aos objetos guardados na camada de persistência ou mesmo
retornar calculos, somatórias ou relatórios.

“Repositories can implement a variety of queries that select object based on whatever criteria the client requires. They can even return summary calculations, such as the total across all matching objects of some numerical attribute”

O capítulo fecha com a seguinte frase:

“A FACTORY handles the begining of an object’s life; A REPOSITORY helps manage the middle an the end.”

Muito se fala sobre a diferença entre DAO x REPOSITORIO. O livro não faz comparação nenhuma, e sim mostra as implementação de Repositório normalmente com interfaces. Porém, diferente das factories, não deixa claro onde colocar os repositórios, seja no domain layer ou infraestructure layer.

Posted in: ddd, oo