Post
EN

도메인 주도 설계 및 구현(4)

팩토리(Factory)

팩토리를 사용하는 주된 동기를 생각해봐라

복잡한 객체와 애그리게잇 인스턴스를 생성하는 책임을 객체로 이동시키자.

여기서의 책임은 도메인 모델과 관련이 있진 않지만, 여전히 도메인 설계를 구성하는 한 요소다.

모든 복잡한 조립과정을 캡슐화하고, 클라이언트가 인스턴스화 된 객체의 구체적 클래스를 참조할 필요가

없도록 인터페이스를 제공하자.

전체 애그리게잇을 하나의 조각으로 생성하고, 고정자를 지정하자.

리파지토리(Repository)

애그리게잇 만이 리파지토리를 갖게 된다.

트랜젝션 관리

도메인 모델과 이를 둘러싸는 도메인 계층은 트랜잭션을 관리하기에 올바른 장소가 아니다.

모델과 연관된 오퍼레이션 자체가 트랜젝션을 관리하기에는 일반적으로 그 단위가 너무 작고, 그들의 수명주기에 트랜잭션 영향을 미쳐서도 안된다. 따라서 애플리케이션 객체에서 관리해야 한다.

분산컴퓨팅 원칙

  1. 네트워크를 신뢰할 수 없다.

  2. 언제나 지연이 있을 수 있고, 많을 수도 있다.

  3. 대역폭은 무한하지 않다.

  4. 네트워크가 안전하다고 가정하지 말라.

  5. 네트워크 위상(topology)은 변화한다.

  6. 정보와 정책은 다수 관리자에 걸쳐 퍼져 있다.

  7. 네트워크 전송은 비용이 든다.

  8. 네트워크 다양성을 갖고 있다.

– package 위치

외부 연동 서비스 -> infrastructure

내부 연동 서비스 -> application

( 이러한 규칙으로 패키지 및 클래스를 나눠놓고 현재 작업 중인데.. 매우.. 정리가 안된다. 좀더 시행착오를 겪어봐야 될까? 하지만 규모가 있는 서비스도 아니고 조직이 아닌데 도메인 형태로 나누는 것도 역시 낭비일 수 있고. 어렵다.. 항상 간단하게 깔끔하게 잘 동작하는 것이 베스트인데 )

메시지 기반 서버를 구성 할땐 table의 변화에 따른 다운타임이 있다는 것을 인지하고 짧게 가져가기 위해 노력해야 한다.

-> 외부 서버로 메시지를 전송 했을 때 해당 서비스가 다운될 경우도 있으니..

애플리케이션

애플리케이션이란 무엇인가?

결론부터 말하면, 애플리케이션을 핵심 도메인 모델과 상호 교류하며 이를 지원하기 위해 잘 조합된 컴포넌트의 집합을 의미하기 위해 사용하고 있다. 이는 일반적으로 도메인 모델 그 자체와 사용자 인터페이스, 내부적으로 사용되는 애플리케이션 서비스, 인프라적 컴포넌트를 뜻한다.

이 각각 영역에 어떤 것들이 들어가는지는 애플리케이션 마다 다르며, 사용하는 아키텍처가 무엇인지에 따라서도 달라진다.

중요하게 기억해야할 한가지는 프리젠테이션 모델은 서비스나 도메인 모델 주변에서 너무 무거운 짐을 지니고 있는 파사드가 아니라는 점이다.

포털-포틀렛(portal-portlet)

사용자 인터페이스 계층 ㅣ 애플리케이션 계층 / | \

제품: 도메인 계층 토론: 도메인계층 리뷰: 도메인 계층

이벤트소싱

이벤트 소싱은 애그리게잇을 생성한 이후 발생한 일련의 이벤트를 통해 애그리게잇의 상태를 나타내는 데 사용 할 수 있다. 이벤트가 발생한 순서대로 해당 이벤트를 다시 재생한다면, 이벤트를 통해 애그리게잇 상태를 재구축 할 수 있다. 여기서 이런 방식의 접근을 합리화 할 수 있는 전제는 영속성 문제를 단순화 시키고 복잡한 행동 속성에 관한 개념을 포착할 수 있게 해주냐는 점이다.

이벤트 소싱에서 발생된 이벤트는 이벤트 저장소에 저장 된다.

그리고 언제나 이해해야 할 부분인 경험이 많은 개발자의 수는 한정적이다.

This article is licensed under CC BY 4.0 by the author.