Skip to content

Latest commit

 

History

History
63 lines (26 loc) · 2.61 KB

File metadata and controls

63 lines (26 loc) · 2.61 KB

정리

응용 서비스는 단순히 도메인 객체 간의 흐름을 제어한다.

표현 영역과 도메인 영역 연결

표현 영역의 입장에서 응용 서비스는 도메인 영역과 표현 영역을 연결해 주는 역할을 한다.

응용 서비스가 복잡하면 도메인 로직의 일부를 구현하고 있을 가능성이 있다.

이는 코드 중복, 로진 분산 등 코드 품질에 안 좋은 영향을 줄 수 있다.

트랜잭션 처리

응용 서비스는 도메인의 상태 변경을 트랜잭션을 이용해 처리해야 한다.

데이터의 일관성을 지키기 위해서 트랜잭션 범위에서 응용 서비스를 실행해야 한다.

도메인 로직 넣지 않기

응용 서비스는 애그리거트와 관련 리포지터리를 이용해서 도메인 객체 간의 실행 흐름을 제어한다.

예를 들어 암호 변경 기능을 응용 서비스에서 구현한다면 Member 애그리거트와 MemberRepository 등 관련 리포지터리를 이용한다.

기존 암호를 올바르게 입력했는지 확인하는 것은 핵심 도메인 로직이기 때문에 응용 서비스가 아닌 애그리거트에서 구현해야 한다.

도메인 로직이 도메인 영역과 응용 서비스에 분산되면 다음과 같은 문제가 발생한다.

  • 코드의 응집성 저하

​ 도메인 데이터와 그 데이터를 조작하는 도메인 로직이 서로 다른 영역에 위치하면 도메인 로직을 파악하기 위해 여러 영역을 분석해야 한다.

  • 로직 중복 현상

​ 여러 응용 서비스에서 동일한 도메인 로직을 구현할 가능성이 높아진다.

​ 코드 중복을 막기 위해 별도의 보조 클래스를 만들 수 있지만, 도메인 영역에 구현되어 있다면 응용 서비스는 그 기능을 사용하기만 하면 된다.

이와 같은 문제는 결과적으로 코드 변경을 어렵게 만든다.

소프트웨어의 중요한 경쟁 요소인 변경 용이성이 떨어진다는 것은 소프트웨어의 가치를 떨어뜨리는 것이다.

따라서 도메인 로직을 도메인 영역에 모아 코드 중복을 줄이고 응집도를 높여 가치를 높여야 한다.

느낀점

핵심 도메인 로직은 응용 서비스에 넣는 것이 아닌 도메인 영역에 위치해야 한다.

소프트웨어의 가치를 높이기 위해서 그동안 사용했던 ~~Facade의 남용을 막고 도메인 중심의 코드를 작성하도록 해야 한다.

좋은 코드는 응용 서비스가 복잡하지 않고 단순하며 도메인 영역에서 많은 일을 하는 것이라고 생각한다.