2. 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
3. 1. Đôi nét về DDD
DDD
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
4. 1. Đôi nét về DDD
Domain Driven Design - Hungpt 401/07/2016
“DDD - Tackling Complexity in the heart of software”, Eric Evans, 2003
6. 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
7. 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 -
8. 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
9. 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
10. 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
11. 2. Domain model
Tậ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
12. 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
13. 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 ?
14. 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
15. 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
16. 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
17. 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
18. 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
19. 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)
20. 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
21. 2. Domain model
01/07/2016 Domain Driven Design - Hungpt 21
Anemic Model vs Rich Model
Anemic model Rich model
22. 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Ụ
23. 2. Domain model
• Entities: Xác định bằng định danh
01/07/2016 Domain Driven Design - Hungpt 23
Entities vs Value Object
Pet
Tên: Miu
Màu lông: Xám tro
Màu mắt: Xanh
ID = 123
ID: 123
24. 2. Domain model
• Entities: Xác định bằng định danh
01/07/2016 Domain Driven Design - Hungpt 24
Entities vs Value Object
Pet
Tên: Miu
Màu lông: Xám tro
Màu mắt: Xanh
ID = 123
ID: 123
Xanh
25. 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
26. 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
27. 2. Domain model
• Value Object: Xác định bằng giá trị
01/07/2016 Domain Driven Design - Hungpt 27
Entities vs Value Object
28. 2. Domain model
• Value Object: Xác định bằng giá trị
01/07/2016 Domain Driven Design - Hungpt 28
Entities vs Value Object
29. 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
31. 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
32. 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
33. 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
34. 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
35. 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
36. 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
37. 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.
38. 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.
39. • 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
40. • 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
41. • 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
42. 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
43. • 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
Client
ID
Name
Client
ID
Name
Credit Cards
Address
Billing
44. • 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
ID
Name
ID
Name
Credit Cards
Address
Billing Validation
Credit Validation
Billing
Client