2022/06/30 (新增連結)
2021/12/27 (新增)
2022/01/09 (更新)
重點章節
引言
消化知識 (ch.1)
交流和語言的使用 (ch.2)
綁定模型與實作 (ch.3)
將隱式概念轉變為顯式概念 (ch.9)
保持模型的完整性 (ch.14)
Domain, Subdomain, Bounded Context, Problem/Solution Space in DDD: Clearly Defined
DDD vs DDD : Domain-Driven Design vs Demo Driven Development, a case for the “Yes upfront design” approach
Getting Started with Domain-Driven Design **
About Domain-Driven Design
Representing the Model
Ubiquitous Language
Strategic Design
Bounded Contexts
Context Maps
Patterns for context mapping
Modeling the Domain
Dealing with Structure
Entities
Value Objects
Cardinality of Associations
Services
Aggregates
Dealing with Life Cycles
Factories
Repositories
Dealing with Behavior
Specification Pattern
Strategy Pattern
Composite Pattern
Application Architecture
User Interface
Application
Domain
Infrastructure
Recently Added Patterns
Domain-Driven Design in a nutshell
Domain-Driven Design is about shared understanding.
The ubiquitous language
Bounded context
Aggregates, entities, and value-types
Services
Evolution
Domain-Driven Design: Everything You Always Wanted to Know About it, But Were Afraid to Ask
Strategic Design: Splitting your design so as to not lose your mind
Collaborative Modeling: Rich communication and effective collaboration
Tactical Design: The Nuts and Bolts of DDD
Domain Driven Design (wikipedia)
Domain-Driven Design – What is it and how do you use it?
Concepts
Context
Model
Ubiquitous Language
Bounded Context
Building Blocks
Entity
Value Object
Domain Event
Aggregate
Service
Repositories
Factories
Get your feet wet with domain-driven design: 3 guiding principles
Capture the domain model, in domain terms, through interactions with domain experts
Embed the domain terminology in the code.
Protect the domain knowledge from corruption by other domains, technical subdomains, etc.
Why you need domain-driven design (even though you think you don't)
Architecture Ownership Patterns For Team Topologies. Part 1: A Business Architecture Model
Domain-Driven Hexagonal Architecture for JavaScript / TypeScript Developers
Architecture & DDD Kata: Online Car Dealership
The first part is creating a business model
The second part explores the company’s domain landscape (business processes, user journeys, products, systems, etc) using an event storm
The third part focuses on strategy — how different domains connect to the business strategy.
The final part of the kata provides a space for trying out message flow modelling.
Strategic Domain-Driven Design Kata: Delivericious
Part 1: Domain discovery
Part 2: Designing domain boundaries
Part 3: Choosing core domains
Part 4: Designing domain collaboration
Turning Domain Discovery into Product and Organizational Improvements with a DDD Exemplar
Domain-Driven Design: Things to Remember When Building a Bounded Context
Domain-Driven Design: When is a Bounded Context no longer a Bounded Context?
Introducing Event Storming (by Alberto Brandolini)
Event storming is a brainstorming workshop where product delivery participants with different expertise share their part of business knowledge expressing it on colorful sticky notes on a wide wall.
Any event storming starts with collecting the knowledge about your business, expressed in a form of Domain Events, which are stuck to the wall in time order from left to right.
A Domain Event is any event that is important for your business and makes an explicit impact on it.
Definitions are used to highlight business terms.
After you feel that most of the domain knowledge is reflected in events on the wall, focus on the Commands that trigger appropriate Events.
A Command is a message that represents the intention of a user, and could be expressed as an action, like Request Booking, Cancel Booking, Request refund, etc.
The Actor triggers a particular command
Policy artifact is used to document conditions and policies for events to happen
Comments
Sometimes you may need to add a description in a free form to something in the domain. That is what the Comments artifact is used for.
Improvements & Opportunities
One of the important advantages of the event storming’s interactive format is that it helps to identify inconsistencies, points for improvements, and find new opportunities for business domain development.
Systems
A System could be anything that provides solutions in your business domain
Event Storming For Rapid Domain Learning
As a (Persona), I want (Command), so that (Domain Event)
From Event Storming to User Stories
One way of looking at it is to start from the key domain events and commands identified during the Event Storming workshops. Many of these events/commands are related to user actions and can be treated as the backbone in a User Story Map, i.e., they can be the epics or user journey steps in the User Story Map.
DomainDrivenDesign.org
Domain-Driven Design is about language and communication
What does this give us in the end:
almost all team members can read the project code;
the statement of tasks becomes more explicit;
business logic bugs become easier to find;
搞笑談軟工 (Teddy Chen)
領域驅動設計學習筆記 (Teddy Chen)
在DDD中則是透過開發人員與領域專家密切合作,將問題領域(problem domain)切割出子領域(subdomain),然後決定每個子領域的Bounded Context作為塑模的邊界範圍。在這個Bounded Context中,大家都用相同的語言來溝通需求、設計以及實作。這種語言在DDD中稱為通用語言(Ubiquitous Language)。
DDD在本質上是一種很適合敏捷開發的方法,DDD首先將一個大系統切分成若干個Bounded Context,每一個Bounded Context只交給一個團隊開發(一個團隊可以同時負責好幾個Bounded Context的開發工作)。每個Bounded Context之間有著清楚的介面,可以獨立運作。這一點對於將敏捷開發拓展到大型軟體專案上有著天生的自然對應關係。
Bounded context的想法就是不要把一整個大系統視為一個context,而是依據「某種方式」把整個大系統分成若干個bounded context(有界限的context)
每一個bounded context都有屬於自己的domain model
落實BDD/SBE的困難
落實DDD的困難
落實DDD的困難之一在於如何找到一個「合適且完整的系統當作例子?」
Think in Domain-Driven Design
Silver bullet for middle+ frontend projects: DDD-like structure
The Domain Driven Design’s Missing Pattern : Domain Services