juniors-dev-study / domain-driven-design

1 stars 0 forks source link

4장 도메인의 격리 #4

Closed y2o2u2n closed 3 years ago

y2o2u2n commented 3 years ago

계층형 아키텍처

도메인에 관련된 코드가 도메인과 관련이 없는 코드에 퍼져 있는 경우 도메인에 관련된 코드를 확인하고 추론하기 어려워진다. 이렇게 되면 프로그램을 이해하기가 어려워진다.

계층형 아키텍처 중 일반적인 형태는 위와 같은데, 주 목적은 도메인 계층을 분리하는 데 있다. 그리고 상위 계층에서 하위 계층으로 의존성을 한 방향으로만 둬서 느슨하게 결합해야 한다.

image

chanhyeong commented 3 years ago

LAYERING 의 가치

각 계층에서 프로그램의 특정 측면만을 다룬다 토대로 응집력 있는 설계 -> 설계를 쉽게 이해

name description
User Interface 사용자에 view + 사용자의 command
외부 컴퓨터가 될 수도 있음
Application 소프트웨어가 수행할 작업 정의 + 도메인 객체가 문제를 해결
다른 시스템의 application layer 와 상호작용
얇게 유지 (업뮤 규칙 및 지식이 없음, 작업을 조정하고 도메인 객체의 협력자에 작업 위임)
업무 상황의 상태는 없지만 프로그램 작업의 진행 상태는 가질 수 있음
Domain 업무 개념 + 상황 + 규칙을 표현
업무 상태 제어 및 사용, 상태 저장과 기술적인 세부 사항은 infra 에 위임
업무용 소프트웨어의 핵심
Infrastructure 기술적인 기능
메시지 전송, persistence, ui rendering

upper -> lower layer 호출 시

lower -> upper

callback 이나 Observer 패턴 (패턴 공부의 필요성..)

Architecture Framework

bearics commented 3 years ago

p73 credit($100), debit() 도메인 단위에서 진행하는데 어떻게 코딩하면 좋을까요


class Account {
    long amount;

    public void debit(long amount, Account another) {
        this.amount += amount;
        another.minus(amount);   << 자신외의 인스턴스를 업데이트해도 괜찮을까
    }

}

// 서비스 단에서 하는게 더 직관적이지 않을지... 응용 service? 도메인 service? 110p
class AService {  
    public debit(Account A, Account B, long amount) {
        B.minus(amount);
        A.plus(amount);
    }
}