Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Domain Driven Design Introduction

5,074 views

Published on

Domain Driven Design Introduction
1) Giới thiệu DDD
2) Domain Model trong DDD
3) DDD patterns: Repository, Aggregate, Factory
4) Demo và tài liệu tham khảo

Published in: Software

Domain Driven Design Introduction

  1. 1. Domain Driven Design Phạm Tiến Hùng phamtienhung@vnpt.vn Domain Driven Design - Hungpt 101/07/2016
  2. 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. 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. 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
  5. 5. 1. Đôi nét về DDD 2003 2006 2013 2014 Domain Driven Design - Hungpt 501/07/2016
  6. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 21. 2. Domain model 01/07/2016 Domain Driven Design - Hungpt 21 Anemic Model vs Rich Model Anemic model Rich model
  22. 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. 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. 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. 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. 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. 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. 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. 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
  30. 30. 2. Domain model 01/07/2016 Domain Driven Design - Hungpt 30 DDD Navigation Map
  31. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  45. 45. 4. Demo Vet Management 01/07/2016 Domain Driven Design - Hungpt 45
  46. 46. 5. Tài liệu tham khảo thêm 01/07/2016 Domain Driven Design - Hungpt 46
  47. 47. • DDD Quickly 5. Tài liệu tham khảo thêm 01/07/2016 Domain Driven Design - Hungpt 47 Tài liệu
  48. 48. • DDD Quickly 5. Tài liệu tham khảo thêm 01/07/2016 Domain Driven Design - Hungpt 48 Tài liệu
  49. 49. • 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
  50. 50. • 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
  51. 51. Q/A 01/07/2016 Domain Driven Design - Hungpt 51
  52. 52. Xin cảm ơn ! 01/07/2016 Domain Driven Design - Hungpt 52

×