ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • part 3. 애그리거트
    책 정리/도메인 주도 개발 시작하기 2023. 7. 23. 11:01

    애그리거트

    애그리거트

    애그리거트란?

    • 변경의 단위다.
    • 데이터를 변경하는 단위로 다뤄지는 객체의 모임을 애그리게이트라고한다.
    • 데이터변경의 단위가 되므로 트랜잭션이나 로크와도 밀접한관계를 갖는다.

    저자의 경험

    • 다수의 애그리거트가 한개의 엔티티 객체만 갖는 경우가 많았으며, 두 개이상의 엔티티로 구성되는 애그리거트는 드믈었다.

    애그리거트 루트

    애그리거트 루트의 역할

    • 애그리거트가 제공해야 할 도메인 기능을 구현
    • 업무규칙을 무시하고 직접 DB테이블의 데이터를 수정하는 것과 같은 결과를 만든다 ← 얼마나 자주 발생하는가?

    주의사항

    • 애그리거트는 독립적이어야함
    • 한 트랜잭션에서는 한 개의 애그리거트만 수정해야 한다.
    • 외부에서 내부 밸류타입을 꺼내서 사용하지 못하도록 주의 해야한다.

    리포지터리와 애그리거트

    NoSQL 에서는 어떻게 저장할까?

    • 노티피케이션 객체를 생성하도록 만들어 주어야 한다.
    public Interface {
    	void Id(UserId id);
    	void Name(UserName name);
    }
    
    public class UserDataModelBuilder : IUserNotification{
    	private UserId id;
    	private UserName name;
    	public void Id(UserId id){
    		this.id = id
    	}
    	public void Name(UserName name){
    		this.name = name
    	}
    	public UserDataModel Build(){
    		return new UserDataModle{
    			Id = id.value
    			Name = name.value
    	}
    }
    
    public class User // domain
    {
    	private readonly UserId id;
    	private UserName name;
    	
    	// 수만가지의 도메인 로직들
    
    	public void Notify(IUserNotification note){
    		note.Id(id);
    		note.Name(name)
    	}
    }
    
    public Repositoy{
    	public void save(User user){
    		var userDataModelBuilder = new UserDataModelBuilder();
    		user.Notify(userDataModelBuilder);
    
    		var userDataModel = userDataModelBuilder.Build();
    
    		context.User.Add(userDataModel);
    		context.SaveChanges();
    	}
    }
    

    출처: 도메인 주도 설계 철저 입문 (위키북스)

    ID를 이용한 애그리거트 참조

    ID를 사용하지 않으면 3가지 발생할 수 있는 문제

    1. 편한 탐색 오용
    2. 성능에 대한 고민
    3. 확장 어려움

    다만 사용시 N+1dp 주의하라

    애그리거트 간 집합 연관

    애그리거트를 팩토리로 사용하기

    질문

    • Store라는 다른 애그리거트에서 product를 생성하는 것은 옳은 일인가?
      • 도메인 서비스를 생성해야할 때인가?
      • 아직 배우지 않아서 이렇게 알려주는 것인가?

    Factory를 설계하는 여러가지 방법 (패턴 학습 추가하기)

    • Factory Method Pattern
    • Abstract Factory Pattern
    • Builder Pattern
    • Factory Pattern

    잘설계된 Factory의 2가지 요건

    1. 각 생성 방법은 원자적이어야하며, 생성된 객체나 Aggregate불변식을 모두 지켜야 한다.
    2. Factory는 생성된 클래스보다 생성하고자 하는 타입으로 추상화 돼야한다.

    댓글

Designed by Tistory.