본문 바로가기

DDD

(29)
DDD 기능 구현을 위한 함수 이해하기 with F# https://pragprog.com/titles/swdddf/domain-modeling-made-functional/ Domain Modeling Made Functional Use domain-driven design to effectively model your business domain, and implement that model with F#. pragprog.com 해당 시리즈는 Domain Modeling Made Functional 책의 번역 및 정리 내용입니다. Functions, Functions, Everywhere 먼저 함수형 프로그래밍이 객체 지향 프로그래밍과 왜 다른지 살펴보겠습니다. 함수형 프로그래밍은 함수를 가장 중요한 것으로 다루며 프로그래밍하는 것입니다. 대부분의 모..
파이프라인으로 워크플로 모델링하기 - 워크플로 합성 및 나머지 서브스텝을 조합하여 워크플로 만들기 이제 모든 단계에 대한 정의가 있습니다. 따라서 각각에 대한 구현이 있을 때 한 단계의 출력을 다음 단계의 입력에 연결하여 전체 워크플로를 구축할 수 있어야 합니다. 하지만 그렇게 간단하지 않을 것입니다! 입력과 출력만 나열되도록 종속성을 제거한 상태에서 모든 단계의 정의를 한 곳에서 살펴보겠습니다. ​ ​type​ ValidateOrder = ​ UnvalidatedOrder ​// input​ ​ -> AsyncResult ​// output​ ​ ​ ​type​ PriceOrder = ​ ValidatedOrder ​// input​ ​ -> Result ​// output​ ​ ​ ​type​ AcknowledgeOrder = ​ PricedOrder ​// i..
파이프라인으로 워크플로 모델링하기 - 함수 타입으로 워크플로 모델링, 이펙트 모델링 타입을 사용하여 워크플로의 각 단계 모델링 상태 기계 접근 방식은 주문 배치(order-placing) 워크플로를 모델링하는 데 완벽하므로 이제 각 단계의 세부 사항을 모델링하겠습니다. ​ workflow "Place Order" = ​ input: OrderForm ​ output: ​ OrderPlaced event (put on a pile to send to other teams) ​ OR InvalidOrder (put on appropriate pile) ​ ​ // step 1 - 순수하지 않은 스텝 ​ do ValidateOrder ​ If order is invalid then: ​ add InvalidOrder to pile ​ stop ​ ​ // step 2 ​ do PriceOrd..
파이프라인으로 워크플로 모델링하기 - 개요 및 상태 머신 이전 두 장에서 타입을 사용하여 일반적인 방식으로 도메인 모델링을 수행하는 방법을 보았습니다. 이 장에서는 거기서 배운 내용을 주문 처리(order-placing ) 워크플로에 적용할 것입니다. 그 과정에서 모든 워크플로를 모델링하는 데 유용한 여러 기술을 살펴보겠습니다. 목표는 항상 그렇듯이 도메인 전문가가 읽을 수 있는 것을 만드는 것입니다. 이제 주문하기 워크플로의 단계를 다시 살펴보겠습니다. 다음은 모델링해야 할 사항에 대한 요약입니다. ​ workflow "Place Order" = ​ input: UnvalidatedOrder ​ output (on success): ​ OrderAcknowledgmentSent ​ AND OrderPlaced (to send to shipping) ​ AND..
도메인의 무결성(Integrity)과 일관성(Consistency) 관리하기 - Make illegal states unrepresentable 해당 장의 요약 : 비즈니스 제약 사항을 주석이 아니라 타입 시스템을 이용해 작성하라! 타입 체킹을 통해 불필요한 테스트코드 작성을 피할 수 있다. 지금까지 F# 타입 시스템을 사용한 도메인 모델링의 기본 사항을 살펴보았습니다. 우리는 도메인을 나타면서도 컴파일 가능하고 구현을 안내하는 데 사용할 수 있는 풍부한 타입 세트를 구축했습니다. 도메인 모델에 맞게 모든 데이터가 유효하고 일관성이 있는지 확인하기 위해 몇 가지 예방 조치를 취해야 합니다. 목표는 신뢰할 수 없는 외부 세계와 구별되는 신뢰할 수 있는 데이터를 항상 포함하는 바운디드 컨텍스트를 만드는 것입니다. 모든 데이터 값이 항상 유효하다는 것을 확신할 수 있다면 구현을 깨끗하게 유지할 수 있고 방어적 코딩을 하지 않아도 됩니다. 이 장에서는 ..
타입으로 도메인 모델링하기 with F# - Aggregate (집합체) https://pragprog.com/titles/swdddf/domain-modeling-made-functional/ Domain Modeling Made Functional Use domain-driven design to effectively model your business domain, and implement that model with F#. pragprog.com Order 및 OrderLine 타입에 대해 자세히 살펴보겠습니다. type OrderLine = { OrderLineId : int Price : float // etc } type Order = { OrderLines : OrderLine list // etc } 첫째, Order는 Entity인가요, Value Objec..
타입으로 도메인 모델링하기 with F# - Value Object, Entitiy https://pragprog.com/titles/swdddf/domain-modeling-made-functional/ Domain Modeling Made Functional Use domain-driven design to effectively model your business domain, and implement that model with F#. pragprog.com 도메인 타입(simple type, compound type)과 워크플로(함수)를 모델링 하였으므로, 데이터 타입의 persistent ID 여부로 VO와 Entity를 분류, F# 문법으로 구현하는 법을 알아봅니다. DDD 용어에서 영구(persistent) ID가 있는 개체를 Entitiy라고 하고 영구(persistent..
타입으로 도메인 모델링하기 with F# - 단순, 복합 타입과 함수 소스코드를 UML, 문서와 같이 사용할 수 있을까요? F# 타입 시스템을 사용하여 코드에 대해 충분히 정확하게 도메인 모델을 캡처하면서 도메인 전문가 및 기타 비개발자가 읽고 이해할 수 있도록 하는 방법을 배웁니다. 타입이 대부분의 문서를 대체할 수 있으며 그 기능은 강력한 이점이 있음을 알 수 있습니다. 디자인이 코드 자체에 표현되기 때문에 구현이 설계와 반드시 동기화됩니다. 설계 리뷰하기 https://itchallenger.tistory.com/411 도메인을 문서화하기 기술적 구현에 대한 편견을 피하면서, 이러한 요구 사항을 어떻게 기록해야 할까요? 시각적 다이어그램(예: UML)을 사용할 수 있지만 작업하기 어렵고 도메인의 미묘한 부분을 포착할 만큼 충분 itchallenger.tistory.c..