도메인? 프로그램이 쓰이는 대상 분야 ex) 회계 시스템, 물류 시스템
지식 표현을 위한 패턴 도메인만의 고유한 개념등을 값을 표현
값 객체: 변하지 않는 객체
엔티티: 변할 수 있는 객체
도메인 서비스: 엔티티나 값 객체에 정의하기 부자연스러운 처리를 하는 인스턴스, 가능하면 사용x
(ex: Exists 같은 경우 본인 객체에게 물어봐야하는 부자연스러움..)
애플리케이션 패턴 : 이용자의 필요를 만족시킬 수 있는 애플리케이션 구성
리포지토리: 데이터 보관 창고
애플리케이션 서비스: 유스케이스를 구현하는 객체
Client에게 제공되는 서비스 이다.
client에게 전달 시 dto를 통해 전달한다.
client는 domain Entity를 조작해서도 안되고 할 수도 없다.
비즈니스로직은 특정 기술기반에 의존하지 않아야한다.
팩토리:
지식표현을 위한 고급 패턴
애그리게이트 : 무결성을 유지하는 경계 값 객체나 엔티티 같은 도메인 객체를 한데 묶어 복잡한 개념을 나타낸다.
명세: 객체를 평가하기 위한 지식 객체를 평가하는 기준을 모듈로 분리할 수 있다.
값 객체
값의 성질
1. 변하지 않는다.
2. 주고받을 수 있다.
3. 등가성을 비교할 수 있다.
엔티티:
1. 가변이다.
2. 속성이 같아도 구분할 수 있다. (식별자가 있다.)
3. 동일성을 통해 구별된다.
추상화 수준이 높은 모듈이 낮은 모듈에 의존해서는 안 되며 두 모듈 모두 추상 타입에 의존해야 한다.
추상 타입이 구현의 세부 사항에 의존해서는 안 된다. 구현의 세부 사항이 추상 타입에 의존해야한다.
고수준일 수록 사람과 가까운 , 저수준일 수록 기계와 가까운 거리를 뜻함
저수준은 고수준의 필요에 의해 존재한다.
저수준 모듈의 수정으로, 고수준 모듈의 변경이 필요하다면 의존관계에 대해 다시 생각