Domain Driven Design Introduction

52
Domain Driven Design Phạm Tiến Hùng [email protected] Domain Driven Design - Hungpt 1 01/07/2016

Transcript of Domain Driven Design Introduction

Page 1: Domain Driven Design Introduction

Domain Driven Design

Phạm Tiến Hùng

[email protected]

Domain Driven Design - Hungpt 101/07/2016

Page 2: Domain Driven Design Introduction

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

Page 3: Domain Driven Design Introduction

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

Page 4: Domain Driven Design Introduction

1. Đôi nét về DDD

Domain Driven Design - Hungpt 401/07/2016

“DDD - Tackling Complexity in the heart of software”, Eric Evans, 2003

Page 5: Domain Driven Design Introduction

1. Đôi nét về DDD

2003 2006 2013 2014

Domain Driven Design - Hungpt 501/07/2016

Page 6: Domain Driven Design Introduction

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

Page 7: Domain Driven Design Introduction

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 -

Page 8: Domain Driven Design Introduction

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

Page 9: Domain Driven Design Introduction

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

Page 10: Domain Driven Design Introduction

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

Page 11: Domain Driven Design Introduction

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

Page 12: Domain Driven Design Introduction

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

Page 13: Domain Driven Design Introduction

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 ?

Page 14: Domain Driven Design Introduction

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

Page 15: Domain Driven Design Introduction

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

Page 16: Domain Driven Design Introduction

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

Page 17: Domain Driven Design Introduction

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

Page 18: Domain Driven Design Introduction

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

Page 19: Domain Driven Design Introduction

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)

Page 20: Domain Driven Design Introduction

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

Page 21: Domain Driven Design Introduction

2. Domain model

01/07/2016 Domain Driven Design - Hungpt 21

Anemic Model vs Rich Model

Anemic model Rich model

Page 22: Domain Driven Design Introduction

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Ụ

Page 23: Domain Driven Design Introduction

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

Page 24: Domain Driven Design Introduction

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

Page 25: Domain Driven Design Introduction

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

Page 26: Domain Driven Design Introduction

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

Page 27: Domain Driven Design Introduction

2. Domain model

• Value Object: Xác định bằng giá trị

01/07/2016 Domain Driven Design - Hungpt 27

Entities vs Value Object

Page 28: Domain Driven Design Introduction

2. Domain model

• Value Object: Xác định bằng giá trị

01/07/2016 Domain Driven Design - Hungpt 28

Entities vs Value Object

Page 29: Domain Driven Design Introduction

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

Page 30: Domain Driven Design Introduction

2. Domain model

01/07/2016 Domain Driven Design - Hungpt 30

DDD Navigation Map

Page 31: Domain Driven Design Introduction

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

Page 32: Domain Driven Design Introduction

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

Page 33: Domain Driven Design Introduction

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

Page 34: Domain Driven Design Introduction

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

Page 35: Domain Driven Design Introduction

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

Page 36: Domain Driven Design Introduction

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

Page 37: Domain Driven Design Introduction

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.

Page 38: Domain Driven Design Introduction

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.

Page 39: Domain Driven Design Introduction

• 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

Page 40: Domain Driven Design Introduction

• 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

Page 41: Domain Driven Design Introduction

• 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

Page 42: Domain Driven Design Introduction

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

Page 43: Domain Driven Design Introduction

• 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

Page 44: Domain Driven Design Introduction

• 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

Page 45: Domain Driven Design Introduction

4. DemoVet Management

01/07/2016 Domain Driven Design - Hungpt 45

Page 46: Domain Driven Design Introduction

5. Tài liệu tham khảo thêm

01/07/2016 Domain Driven Design - Hungpt 46

Page 47: Domain Driven Design Introduction

• DDD Quickly

5. Tài liệu tham khảo thêm

01/07/2016 Domain Driven Design - Hungpt 47

Tài liệu

Page 48: Domain Driven Design Introduction

• DDD Quickly

5. Tài liệu tham khảo thêm

01/07/2016 Domain Driven Design - Hungpt 48

Tài liệu

Page 49: Domain Driven Design Introduction

• 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

Page 50: Domain Driven Design Introduction

• 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

Page 51: Domain Driven Design Introduction

Q/A

01/07/2016 Domain Driven Design - Hungpt 51

Page 52: Domain Driven Design Introduction

Xin cảm ơn !

01/07/2016 Domain Driven Design - Hungpt 52