DDD 서비스
오늘 나는 배웠다 — 2022년 4월 5일
집계
Um Aggregate é um padrão em DDD onde temos um conjuntos de objetos de dominio e value objects podem ser tratados como uma unidade
가치 객체
Value objects são como o nome diz, um objeto que não tem operações associadas, ele serve somente para guardar valores, no exemplo acima o Address é um value object pois quando uma pessoa muda para a rua ao lado, mesmo que a unica parte que tenha mudado no endereço dela seja a rua, nós não falamos que ela ATUALIZOU a rua no endereço, e sim que ela MUDOU de endereço, o que no sistema se traduziria em um novo value object e não em um update dentro de um value object já existente
서비스
Quando falamos em DDD o Service é uma operação sem estado que cumpre uma tarefa especifica do domínio. A melhor indicação que devemos criar um service é quando queremos fazer uma operação que não parece fazer sentido como o método em um um Agreggate ou um Value Object.
쿠이다도스
구현
Para o mesmo sistema demonstrado acima podemos ter por exemplo uma entidade de orders que contem items como value object
export class Order{
private _id: string;
private _customerId: string;
private _items: OrderItem[];
private _total: number;
constructor(id: string, customerId: string, items: OrderItem[]){
this._id = id;
this._customerId = customerId;
this._items = items;
this._total = this.total();
}
total(): number{
return this._items.reduce((acc, item) => acc + item.price, 0)
}
}
Nessa classe de order temos um método para retornar o total dá order em especifico mas e se quisermos calcular o total de todas as orders? Não faz sentido ficar como método de uma order já q esse método vai precisar receber outras orders para fazer a conta, é nesse caso que devemos criar o service de Orders
export class OrderService{
static total(orders: Order[]): number {
return orders.reduce((acc, order) => acc + order.total(), 0);
}
}
O OrderService pode conter todas os métodos que não fazem sentido ficarem dentro de Order inclusive por exemplo criar uma nova order
export class OrderService{
static total(orders: Order[]): number {
return orders.reduce((acc, order) => acc + order.total(), 0);
}
static placeOrder(customer: Customer, items: OrderItem[]): Order{
if(items.length === 0){
throw new Error("Order must have at least one item")
}
const order = new Order(uuid(), customer.id, items);
return order
}
}
Ainda 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-services-1cm7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)