DDD 공장
오늘 나는 2022년 5월 10일을 배웠다
Factories
Dinâmica
Implementação
공장
Desloque a responsabilidade de criar instâncias de objetos complexos e agregados para um objeto separado, que pode não ter responsabilidade no modelo de domínio, mas ainda faz parte do design do domínio. Forneça uma interface que encapsule toda a criação complexa e que não exija que o cliente faça referência às classes concretas dos objetos que estão sendo instanciados. Crie agregados inteiros de uma única vez, reforçando suas invariáveis.
EVANS, Eric. Domain Drive Design
Ou seja, no exemplo usado no meu post sobre eu commento sobre como funcionam aggregates e dou exemplo do
address
em um customer
, quando usamos esse exemplo fica bem claro que o aggregate de customer
precisa de um um endereço, o Eric Evans fala que a Factory deve ser a responsavel por criar esse customer
já com o endereço, sendo assim a Factory fica responsável por criar um aggregate por completo, e não os objects e value objects de forma separada디나미카
Nesse exemplo podemos ver qual a logica de funcionamento. O cliente vai especificar para a Factory o que ele quer em formato de paraâmetros, a Factory vai criar o agregado de acordo com o que o cliente pediu e vai retornar para ele.
구현
예를 들어 Factory fica muito simples를 고객에게 구현하십시오.
export class CustomerFactory{
static create(name: string): Customer{
return new Customer(uuid(), name)
}
static createWithAddress(name: string, address: Address): Customer{
const customer = new Customer(uuid(), name);
customer.changeAddress(address);
return customer
}
}
onde o
client
que chamar a factory
vai falar se quer um customer
normal ou um customer
com address
já associado, esse exemplo poderia ser expandido pra um customer
já ativo, etc...e para usar a
factory
세리아 다 세긴테 포르마 const address = new Address("Rua 123", 123, "any zip", "salvador" );
let customer = CustomerFactory.createWithAddress("John", address )
Observe que o
address
não tem uma Factory própria, isso se deve ao fato de que a Factory é para o agregado como um todo e não para cada object
e value object
contido em um agregado pois isso não faria sentidoAinda estou aprendendo sobre DDD e se quiser ver melhor o código pode dar uma olhada nesse Repositório
Reference
이 문제에 관하여(DDD 공장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yanpiing/ddd-factories-1cf2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)