Home » Design » Distillation process in Domain-Drive Design

Distillation process in Domain-Drive Design

Overview

Distillation có nghĩa là “chưng cất” (chất lỏng, rượu). Nó được hiểu là quá trình “chắt” là những gì tinh túy nhất từ một nguồn bị trộn lẫn.

Theo định nghĩa của Eric Evan, trong ngữ cảnh thiết kế theo hướng Miền (domain) nghiệp vụ:

“Distillation is the process of separating the components of a mixture to extract the essence in a form that makes it more valuable and useful.”

Nghĩa là “distillation’ là một quy trình để tìm ra những gì giá trị nhất và hữu dụng nhất.

Distillation là một công đoạn trong quá trình thiết kế chiến lược (high level)

The Background

Cho một bài toàn nghiệp vụ và chúng ta cần phân tích để tìm ra những chức năng có giá trị nghiệp vụ cao nhất để làm đầu vào cho các bước tiếp theo (thiết kế, lập trình, kiểm thử)

The Inputs

Đầu vào của quá trình Distillation bao gồm
  1. Bài toán nghiệp vụ,
  2. Các bản thiết kế của bài toán,
  3. (Danh sách) domain, sub-domains, các Core.

The Outputs

  1. Các bản thiết kế của bài toán sau khi được cập nhật,
  2. (Danh sách) domain, sub-domains, các core sau khi được cập nhật.
Nghĩa là, distillation chính là quá trình làm mịn thiết kế của bài toán.

Output của quá trình này được thực hiện qua quá trình refactor liên tục bài toán nghiệp vụ và các thiết kế.

Quan trọng hơn, danh sách Output của quá trình này trùng với Input của bài toán và chỉ khác nhau ở mức độ chi tiết.

Tìm ra được Core Domain (trong số danh sách các module) là một output chính của quá trình Distillation.

Steps by Steps

  1. Tập hợp những người liên quan từ domain expert, user cho tới developer
  2. Tạo những version đầu tiên của thiết model (có thể tài liệu này có từ trước)
  3. Định nghĩa rõ ràng Ngôn ngữ Dùng chung cho những người liên quan
  4. Đi sâu vào từng Bounded Context và refine chúng
  5. Phân tích và cập nhật Context map (nếu cần thiết)
  6. Phân tích và cập nhật Class diagram (nếu cần thiết)
  7. Xem xét bài toán tổng thể trên nhiều context, đặc biệt với những context liên quan đến context chính

Some Important Points

Sản phẩm phụ có thể được sinh ra trong quá trình Distillation.

Trong/sau quá trình distillation (hay refactor) domain, domain vẫn có thể quá to (hơn mức có thể làm việc hiệu quả với nó). Nếu domain vẫn còn to thì còn cần tiếp tục distillation.

Việc tìm ra Core Domain là tối quan trọng trong giai đoạn này.

Những subdomain chung tìm đươc trong quá trình này chính là phần bổ sung quan trọng không kém so với Core Domain được tìm ra.

Eric Evans gợi ý rằng, để tìm ra Core Domain – một output của quá trình Distillation – cần sự phối hợp của cả đội, bao gồm từ người phát triển tới chuyên gia ngành hẹp.

Conclusions

Distillation là một quá trình quan trọng trong thiết kế chiến lược theo phương pháp Domain-Drive Design. Quá trình này là sự kaizen liên tục, sự chú ý tới (domain) tổng thể và domain nhỏ hơn với ràng buộc rằng yêu cầu về tầm nhìn của hệ thống luôn được thỏa mãn và sao cho một mô hình “đắt” được tìm ra, mở đường cho việc thiết kể (tổng thể, không chỉ domain) của hệ thống uyển chuyển nhất.

Referencens

  1. Eric Evans “Domain-Driven Design: Tackling Complexity in the Heart of Software”
  2. Infoq: Strategic Domain Driven Design with Context Mapping
  3. InfoQ: Domain Driven Design Quickly