tags / ddd
Validation 코드는 어디에 작성해야 할까? - The 3 types of validation logics
개발자들은 다양한 validation 코드들을 작성하는데 많은 시간을 소비한다. 이곳저곳에 덕지덕지 붙어있는 validation 코드들을 바라보면, 과연 이 코드들이 여기에 있어도 되는 것인지 의문이 생긴다. 다양한 종류의 validation 코드들을 어디에 작성해야 하는지 정리해보자.
Domain model에서 repository를 직접 사용해도 될까? - 도메인 모델의 영속성 무지
Repository는 인프라적인 요소에 가깝다고 할 수 있다. 그런데, 이 repository를 도메인 모델에서 직접 사용해도 괜찮을까? DDD와 관련된 여러 참고 문서들에서는 이에 대해 통일되지 않은 견해를 보이고 있다. 이 글을 통해 여러 견해들을 한꺼번에 모아서 생각해보자.
Aggregate의 문제점과 바람직한 설계 방법 - DDD aggregate diet
DDD의 aggregate는 일관성 관리를 위해 매우 중요한 개념이지만, 덩치가 커질수록 성능과 확장성 측면에서 문제가 발생하게 된다. Composition 기반 aggregate의 문제점에 대해 자세히 살펴보고, 효율적인 aggregate를 설계하기 위한 방법들을 알아보자.
Aggregate란 무엇인가 도대체! - DDD aggregate의 기초 쉽게 이해하기
DDD에서는 aggregate라는 용어가 자주 등장한다. DDD의 다양한 개념들을 이해하기 위해서는 aggregate에 대한 이해가 선행되어야 하는데, 보통 DDD 자료들에서는 aggregate에 대한 설명이 중후반부에 등장한다. DDD 초보자도 쉽게 이해할 수 있도록 aggregate를 겉핥기해보자.
Event와 command의 차이점 쉽게 이해하기 - Events vs commands in EDA
Event Driven Architecture(EDA)를 시스템에 적용할 때는 거창한 이름 때문에 마치 모든 것을 event로 처리해야 할 것만 같다. 반은 맞고 반은 틀리다. Command라는 개념을 event와 분리하여 생각할 필요가 있다. Event와 command가 도대체 뭐가 다른지 간단히 정리해보자.
CQRS 개념 초간단 정리 - Understanding CQRS pattern
개발을 하다보면 CQRS라는 용어를 자주 만나게 된다. 특히 이벤트 기반 아키텍처나 대용량 트래픽 처리와 관련된 주제에서는 항상 빠지지 않고 등장하는 단골 메뉴다. 예제와 함께 CQRS 패턴의 정의, 장단점, 그리고 적용 방법 등을 최대한 간단하게 정리해보자.
Domain entity와 ORM을 따로 구분해서 정의하는 방법 - Domain entity with imperative ORM
Domain entity를 정의할 때 declarative 방식의 ORM을 사용하면 domain model에 DB 관련 정보가 노출되는 문제가 있다. Python sqlalchemy를 활용하여 imperative mapping style로 domain entity로부터 ORM을 분리해보자.
도메인 entity와 ORM을 동시에 추구하면 안 되는 걸까? - Domain entity with declarative ORM
ORM을 사용하는 환경에서 DDD를 따르는 코드를 작성하다보면, domain entity를 어떤식으로 정의해야 하는지 혼란스러울 때가 있다. Python sqlchemy를 통해 declarative mapping 방식으로 domain entity를 어떻게 구현하면 좋은지 알아보자.
영속성 domain entity를 정의할 때 상속을 사용해도 괜찮을까? - Repository code smell
객체지향 프로그래밍에서는 코드 중복 최소화 및 다형성을 위해 인터페이스나 추상 클래스를 정의하고 상속을 사용하는 경우가 많다. 그러나, 이는 도메인 주도 설계(DDD) 관점에서 항상 바람직한 것은 아니다. 영속성 domain entity를 정의할 때 상속을 사용하는 것이 적절한지, 그리고 어떤 것들을 고려해야 하는지에 대해 논의해보자.
자가 위임, 자가 캡슐화 - DDD에서 생성자를 정의하는 방법
DDD에서는 생성자를 정의할 때 자가 위임(self-delegation)과 자가 캡슐화(self-encapsulation)를 사용할 것을 권장한다. 이 두 가지 개념을 통해 어떻게 생성자를 정의해야 하는지 알아보자.