4. 유스케이스 구현하기

육각형 아키텍처는 도메인 중심의 아키텍처에 적합하므로 도메인 엔티티를 만드는 것으로 시작하여 유스케이스를 구현해보도록 하자.

도메인 모델 구현하기

한 계좌에서 다른 계좌로 송금하는 유스케이스를 구현해보자. 이를 객체지향적인 방식으로 모델링하는 한 가지 방법은 입금과 출금을 위한 Account 엔티티를 만들고, 출금 계좌에서 돈을 출금해 입금 계좌로 돈을 입금하는 것이다.

Activity 엔티티에는 계좌에 대한 모든 입금과 출금을 기록하며, 실제 계좌의 현재 스냅샷을 제공한다. 한 계좌에 대한 모든 활동들을 항상 메모리에 한꺼번에 올리는 것은 현명하지 못하므로, Account 엔티티에는 ActivityWindow에서 포착한 지난 며칠 혹은 몇 주간의 범위에 해당하는 행동만을 보유한다.

계좌의 현재 잔고 조회를 위해서는 Account 엔티티는 ActivityWindow의 첫 번째 활동 바로 전의 잔고를 표현하는 baselineBalance를 가지고 있다. 현재 총 잔고는 기준 잔고에 ActivityWindow의 모든 활동들을 계산한 값이 된다. ActivityWindow 덕분에 입금과 출금은 ActivityWindow에 새로운 Activity를 추가하는 것에 불과하다. 이제 입금과 출금을 위한 Account 엔티티가 있으므로, 이를 중심으로 유스케이스를 구현하기 위해 바깥으로 나갈 수 있다.

Money: 금액

AccountId: 계좌 ID

Account: 계좌

Activity: 입금과 출금 등의 활동

ActivityWindow: 특정 기간 사이의 활동 내역 모음

유스케이스

  1. 입력을 받는다.
  2. 비즈니스 규칙을 검증한다.
  3. 모델 상태를 조작한다.
  4. 출력을 반환한다.