domain driven design introduction
TRANSCRIPT
Domain Driven Design
Phạm Tiến Hùng
Domain Driven Design - Hungpt 101/07/2016
Nội dung
1. Đôi nét về DDD
2. Domain Model trong DDD
3. Các kỹ thuật và mẫu thiết kế trong DDD
3.1. Các pattern quản lý vòng đời đối tượng trong DDD
3.2. Duy trì tính nhất quán của Model
4. Demo
5. Tài liệu tham khảo thêm
6. Trao đổi
Domain Driven Design - Hungpt 201/07/2016
1. Đôi nét về DDDDDD
Tại sao quan tâm đến DDD
3 Điểm mấu chốt trong DDD
Lợi ích của DDD
Hạn chế của DDD
01/07/2016 Domain Driven Design - Hungpt 3
1. Đôi nét về DDD
Domain Driven Design - Hungpt 401/07/2016
“DDD - Tackling Complexity in the heart of software”, Eric Evans, 2003
1. Đôi nét về DDD
2003 2006 2013 2014
Domain Driven Design - Hungpt 501/07/2016
1. Đôi nét về DDD
Domain Driven Design - Hungpt 601/07/2016
Domain-driven design (DDD) is an approach to developing software for complex needs by deeply connecting the implementation to an evolving
model of the core business concepts.
DDDCommunity.org
1. Đôi nét về DDD
1. Nguyên tắc và mẫu thiết kế để giải quyết vấn đề phức tạp
2. Lịch sử thành công với nhiều dự án phức tạp
3. Phù hợp với kinh nghiệm về phần mềm đã được đúc kết
4. Code thể hiện nghiệp vụ rõ ràng, có thể test được
01/07/2016 Domain Driven Design - Hungpt 7
Tại sao quan tâm đến DDD ?
- Steve Smith, CTO Falafel Software -
1. Đôi nét về DDD
01/07/2016 Domain Driven Design - Hungpt 8
3 Điểm mấu chốt trong DDD
2. Tập trung vào mô hình của từng Sub Domain 3. Thực thi từng Sub Domain
1. Đào sâu kiến thức với Domain Expert
1. Đôi nét về DDD
Phần mềm trở nên linh hoạt
Phần mềm phản ánh tầm nhìn của khách hàng/chuyên gia ngành.
Giải quyết những vấn đề phức tạp
Code tổ chức tốt và dễ dàng test
Business logic nằm ở một chỗ
Rất nhiều pattern hữu ích để sử dụng
01/07/2016 Domain Driven Design - Hungpt 9
Lợi ích của DDD
1. Đôi nét về DDD
• Thời gian và effort
• Trao đổi và mô hình hóa vấn đề vơí DExpert
• Tách domain logic ra khỏi các phần khác của ứng dụng
• Học
• Nguyên tắc mới
• Pattern mới
• Quy trình mới
• Chỉ hữu ích khi áp dụng giải quyết vấn đề phức tạp
• Ít nhất vấn đề phải tồn tại do sự phức tạp của business.
• Lựa chọn DDD không chỉ bởi sự phức tạp kỹ thuật đơn thuần.
• Thuyết phục đồng nghiệp, tổ chức hiểu và áp dụng nguyên tắc của DDD.
01/07/2016 Domain Driven Design - Hungpt 10
Hạn chế của DDD
2. Domain modelTập trung vào domain model
Ngôn ngữ chung
Anemic vs Rich model
Entities vs Value Object
Domain Services
DDD Navigation map
01/07/2016 Domain Driven Design - Hungpt 11
2. Domain model
• Phân tách, gom gộp, module hóa
• Đối phó với sự phức tạp
• Mô hình bằng: hình vẽ, ảnh chụp, note, ngôn ngữ…
• Không ngừng đào sâu kiến thức về domain
01/07/2016 Domain Driven Design - Hungpt 12
Tập trung vào domain model
2. Domain model
Vet Management
01/07/2016 Domain Driven Design - Hungpt 13
Tập trung vào domain model
Patient Scheduling
Staff Scheduling
Surgery Scheduling
Office Visit
CMS ?
Owner & Pet Managemrnt
Billing ?
2. Domain model
Vet Management – Break thành các Sub Domain
01/07/2016 Domain Driven Design - Hungpt 14
Tập trung vào domain model
Staff
Visit Records
Clients Records
Patient Records
Appointment Scheduling
Khách hàng (clients) đặt lịch hẹn (appointments) cho bệnh nhân (vật nuôi - patients)
Cuộc hẹn có thể là thăm khám (office visits) hoặc phẫu thuật (surgeries)
Thăm khám có là một buổi kiểm tra, yêu cầu có bác sĩ (doctors), hoặc kỹ thuật viên (tech)
Thăm khám phụ thuộc vào phòng kiếm tra (exam room) còn trống
Phẫu thuật phụ thuộc vào phòng phẫu thuật (O/R) và hồi phục
(Recovery), và có thể liên quan đến các thủ tục khác.
2. Domain model
Vet Management – Tập trung vào từng Sub Domain
01/07/2016 Domain Driven Design - Hungpt 15
Tập trung vào domain model
Appointment Scheduling
2. Domain model
Vet Management – Tập trung vào từng Sub Domain
01/07/2016 Domain Driven Design - Hungpt 16
Tập trung vào domain model
Appointment Scheduling
2. Domain model
Vet Management – Tập trung vào từng Sub Domain
01/07/2016 Domain Driven Design - Hungpt 17
Tập trung vào domain model
Appointment Scheduling
2. Domain model
Vet Management – Tập trung vào từng Sub Domain
01/07/2016 Domain Driven Design - Hungpt 18
Tập trung vào domain model
Appointment Scheduling
2. Domain model
• Loại bỏ khuynh hướng dùng Phương ngữ riêng:
• Giữa Dev và Domain Expert
• Giữa Code và Nghiệp vụ thực tế
01/07/2016 Domain Driven Design - Hungpt 19
Ngôn ngữ chung (Ubiquitous Language)
2. Domain model
• Cấu trúc
• Thuộc tính
• Quan hệ
01/07/2016 Domain Driven Design - Hungpt 20
Anemic Model vs Rich Model
• Cấu trúc
• Thuộc tính
• Quan hệ
• Hành vi
Anemic model Rich model
2. Domain model
01/07/2016 Domain Driven Design - Hungpt 21
Anemic Model vs Rich Model
Anemic model Rich model
2. Domain model
01/07/2016 Domain Driven Design - Hungpt 22
Anemic Model vs Rich Model
Anemic model-> CRUD
Rich model-> DDD
MÔ HÌNH THỂ HIỆN CÁCH
LƯU TRỮ
MÔ HÌNH THỂ HIỆN LUỒNG
NGHIỆP VỤ
2. Domain model
• Entities: Xác định bằng định danh
01/07/2016 Domain Driven Design - Hungpt 23
Entities vs Value Object
PetTên: Miu
Màu lông: Xám tro
Màu mắt: Xanh
ID = 123
ID: 123
2. Domain model
• Entities: Xác định bằng định danh
01/07/2016 Domain Driven Design - Hungpt 24
Entities vs Value Object
PetTên: Miu
Màu lông: Xám tro
Màu mắt: Xanh
ID = 123
ID: 123
Xanh
2. Domain model
• Value Object: Xác định bằng giá trị
01/07/2016 Domain Driven Design - Hungpt 25
Entities vs Value Object
$100 $200
2. Domain model
• Value Object: Xác định bằng giá trị
01/07/2016 Domain Driven Design - Hungpt 26
Entities vs Value Object
$100 $200VND
2. Domain model
• Value Object: Xác định bằng giá trị
01/07/2016 Domain Driven Design - Hungpt 27
Entities vs Value Object
2. Domain model
• Value Object: Xác định bằng giá trị
01/07/2016 Domain Driven Design - Hungpt 28
Entities vs Value Object
2. Domain model
• Không thực sự nằm trong một Entity hay Value Object nào của domain.
• Hoạt động trên nhiều đối tượng khác nhau
• Stateless
01/07/2016 Domain Driven Design - Hungpt 29
Domain Services
2. Domain model
01/07/2016 Domain Driven Design - Hungpt 30
DDD Navigation Map
3. Các kỹ thuật và mẫu thiết kếCác pattern quản lý vòng đời đối tượng trong DDD
- Aggregate - Factory - Repositories
Duy trì tính nhất quán của Model
- Bounded context - Anti-corruption Layer - Shared Kernel
01/07/2016 Domain Driven Design - Hungpt 31
3. Các kỹ thuật và mẫu thiết kế
01/07/2016 Domain Driven Design - Hungpt 32
Các pattern quản lý vòng đời đối tượng trong DDD
Model data change
Model Data Creator
Model data Retriever
3. Các kỹ thuật và mẫu thiết kế
• Aggregate
01/07/2016 Domain Driven Design - Hungpt 33
Các pattern quản lý vòng đời đối tượng trong DDD
3. Các kỹ thuật và mẫu thiết kế
• Aggregate
• Một nhóm đối tượng
• Một đơn vị thống nhất đối với các
thay đổi dữ liệu
01/07/2016 Domain Driven Design - Hungpt 34
Các pattern quản lý vòng đời đối tượng trong DDD
3. Các kỹ thuật và mẫu thiết kế
• Aggregate
01/07/2016 Domain Driven Design - Hungpt 35
Các pattern quản lý vòng đời đối tượng trong DDD
3. Các kỹ thuật và mẫu thiết kế
• Aggregate
01/07/2016 Domain Driven Design - Hungpt 36
Các pattern quản lý vòng đời đối tượng trong DDD
Vet Management
3. Các kỹ thuật và mẫu thiết kế
• Factory
01/07/2016 Domain Driven Design - Hungpt 37
Các pattern quản lý vòng đời đối tượng trong DDD
Pattern hỗ trợ khởi tạo đối tượng Aggregate.
3. Các kỹ thuật và mẫu thiết kế
• Factory
01/07/2016 Domain Driven Design - Hungpt 38
Các pattern quản lý vòng đời đối tượng trong DDD
Pattern hỗ trợ khởi tạo đối tượng Aggregate.
• Factory
3. Các kỹ thuật và mẫu thiết kế
01/07/2016 Domain Driven Design - Hungpt 39
Các pattern quản lý vòng đời đối tượng trong DDD
Vet Management
• Repository: Repository đảm nhiệm việc lấy ra những đối tượng đã được lưu trữ.
3. Các kỹ thuật và mẫu thiết kế
01/07/2016 Domain Driven Design - Hungpt 40
Các pattern quản lý vòng đời đối tượng trong DDD
Aggregate (Domain Model) Repository
Data Store
• Cung cấp 1 cách trừu tượng hóa cho việc lưu trữ
• Tách biệt các mối quan tâm
• Cho phép kiểm thử
• Tăng khả năng bảo trì
• Repository: Repository đảm nhiệm việc lấy ra những đối tượng đã được lưu trữ.
3. Các kỹ thuật và mẫu thiết kế
01/07/2016 Domain Driven Design - Hungpt 41
Các pattern quản lý vòng đời đối tượng trong DDD
Lợi ích của Repository
3. Các kỹ thuật và mẫu thiết kế
01/07/2016 Domain Driven Design - Hungpt 42
Duy trì tính nhất quán của Model
• Bounded context: Một ngữ cảnh giới hạn của model.
3. Các kỹ thuật và mẫu thiết kế
01/07/2016 Domain Driven Design - Hungpt 43
Duy trì tính nhất quán của Model
Client
Appointment Scheduling Context
ClientIDName
ClientIDNameCredit CardsAddress
Billing
• Bounded context: Một ngữ cảnh giới hạn của model.
3. Các kỹ thuật và mẫu thiết kế
01/07/2016 Domain Driven Design - Hungpt 44
Duy trì tính nhất quán của Model
Client
Appointment Scheduling Context
IDName
IDNameCredit CardsAddressBilling ValidationCredit Validation
Billing
Client
4. DemoVet Management
01/07/2016 Domain Driven Design - Hungpt 45
5. Tài liệu tham khảo thêm
01/07/2016 Domain Driven Design - Hungpt 46
• DDD Quickly
5. Tài liệu tham khảo thêm
01/07/2016 Domain Driven Design - Hungpt 47
Tài liệu
• DDD Quickly
5. Tài liệu tham khảo thêm
01/07/2016 Domain Driven Design - Hungpt 48
Tài liệu
• Domain-Driven Design, Tackling Complexity
in the Heart of Software
5. Tài liệu tham khảo thêm
01/07/2016 Domain Driven Design - Hungpt 49
Tài liệu
• Pluralsight
Domain-Driven Design
Fundamentals
(Steve Smith & Julie Lerman)
5. Tài liệu tham khảo thêm
01/07/2016 Domain Driven Design - Hungpt 50
Tài liệu
Q/A
01/07/2016 Domain Driven Design - Hungpt 51
Xin cảm ơn !
01/07/2016 Domain Driven Design - Hungpt 52