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 sentido

Ainda estou aprendendo sobre DDD e se quiser ver melhor o código pode dar uma olhada nesse Repositório

좋은 웹페이지 즐겨찾기