DDD

이석준·2022년 8월 18일
0

DDD 도메인 지식에 초첨을 맞춘 설계 기법

도메인? 프로그램이 쓰이는 대상 분야 ex) 회계 시스템, 물류 시스템

지식 표현을 위한 패턴 도메인만의 고유한 개념등을 값을 표현
값 객체: 변하지 않는 객체
엔티티: 변할 수 있는 객체
도메인 서비스: 엔티티나 값 객체에 정의하기 부자연스러운 처리를 하는 인스턴스, 가능하면 사용x
(ex: Exists 같은 경우 본인 객체에게 물어봐야하는 부자연스러움..)

애플리케이션 패턴 : 이용자의 필요를 만족시킬 수 있는 애플리케이션 구성
리포지토리: 데이터 보관 창고
애플리케이션 서비스: 유스케이스를 구현하는 객체
Client에게 제공되는 서비스 이다.
client에게 전달 시 dto를 통해 전달한다.
client는 domain Entity를 조작해서도 안되고 할 수도 없다.
비즈니스로직은 특정 기술기반에 의존하지 않아야한다.
팩토리:

  • DTO 생성자 메서드에서 Entity객체를 인자로 받는 방법도 있다.

지식표현을 위한 고급 패턴
애그리게이트 : 무결성을 유지하는 경계 값 객체나 엔티티 같은 도메인 객체를 한데 묶어 복잡한 개념을 나타낸다.
명세: 객체를 평가하기 위한 지식 객체를 평가하는 기준을 모듈로 분리할 수 있다.

값 객체

값의 성질
1. 변하지 않는다.
2. 주고받을 수 있다.
3. 등가성을 비교할 수 있다.

엔티티:
1. 가변이다.
2. 속성이 같아도 구분할 수 있다. (식별자가 있다.)
3. 동일성을 통해 구별된다.

의존 관계 역전 원칙

  • 추상화 수준이 높은 모듈이 낮은 모듈에 의존해서는 안 되며 두 모듈 모두 추상 타입에 의존해야 한다.

  • 추상 타입이 구현의 세부 사항에 의존해서는 안 된다. 구현의 세부 사항이 추상 타입에 의존해야한다.

  • 고수준일 수록 사람과 가까운 , 저수준일 수록 기계와 가까운 거리를 뜻함

  • 저수준은 고수준의 필요에 의해 존재한다.
    저수준 모듈의 수정으로, 고수준 모듈의 변경이 필요하다면 의존관계에 대해 다시 생각

애그리게이트

  • 불변 조건을 유지하는 단위로 꾸려지며 객체 조작의 질서를 유지한다.
  • 애그리게이트에 포함되는 객체를 외부에 노출하지 않음으로 불변을 유지할 수 있다.
  • 외부에서 애그리게이트를 다루는 조작은 모두 루트를 거쳐야한다.
  • User() 1 : n Circle() 의 경우
  • Circle.Members.add(member) xxxx --> Circle.MemberAdd(member)
    --> Circle에 MemberAdd 메서드를 구현한다.
  • Circle.Members.size()<FullMemberCount xxxx ---> Circle.isFull
    --> Circle에 isFull 함수를 구현.

명세

0개의 댓글