Domain driven design

Bách khoa toàn thư mở Wikipedia
Jump to navigation Jump to search

Domain - driven design là một cách tiếp cận trong việc xây dựng phần mềm phức tạp[1], sự phức tạp ở đây là những logic của lĩnh vực kinh doanh (domain business).

Thuật ngữ đã được đưa ra bởi Eric Evans trong một cuốn sách cùng tên.[2]

Các khái niệm[sửa | sửa mã nguồn]

Domain[sửa | sửa mã nguồn]

định nghĩa dễ hiểu nhất về domain ở đây là, ví dụ trong một e-commerce system thì product, order, customer... và các hiểu biết như customer có thể order một product, một order có thể được thanh toán bởi một customer chính là thuộc về domain.

những phần về kỹ thuật bao gồm xử lý request, form, connect database, lưu trữ thông tin nằm ngoài domain.

Ubiquitous Language[sửa | sửa mã nguồn]

Một ngôn ngữ có cấu trúc xung quanh domain được sử dụng bởi tất cả các thành viên trong nhóm phát triển (developer, domain expert, customer) để kết nối các hoạt động của nhóm với phần mềm.

đây là ngôn ngữ giải quyết cho vấn đề khó khăn tồn tại là doanh nghiệp thường không hiểu được những ngôn ngữ kỹ thuật bên dưới, còn nhà phát triển thì không hiểu được business logic của product. Cần có một ngôn ngữ chung để chia sẽ giữa doanh nghiệp và nhà phát triển để hiểu sản phẩm theo một cách như nhau.

Contexts and Bounded Contexts[sửa | sửa mã nguồn]

Bounded Contexts tạm dịch Phạm vi Ngữ cảnh.

Phạm vi ngữ cảnh có thể được xem như một ứng dụng thu nhỏ, chứa những model của chính nó và mã nguồn cùng cơ chế lưu trữ (persistence) riêng. Bên trong Phạm vi Ngữ cảnh cần có sự thống nhất hợp lý. mỗi bounded contexts nên độc lập với bất kỳ bounded contexts khác. Ví dụ trong một e-commerce system chúng ta có thể coi chương trình của chúng ta trong ngữ cảnh của cửa hàng (shopping), nhưng sâu hơn ta có thể thấy có những ngữ cảnh khác nữa ở đây chẳng hạn Hàng hóa tồn kho (Inventory), Giao nhận (Delivery) và Tài khoản (Account).

Chia một ứng dụng lớn trong những bối cảnh hợp lý khác nhau sẽ cho chúng ta khả năng module hóa hệ thống, sẽ giúp ta phân tách mối quan tâm khác nhau vào những phần riêng biệt và làm cho các ứng dụng dễ dàng để quản lý và nâng cấp.

Entities and Value Objects[sửa | sửa mã nguồn]

Aggregates and Aggregate Roots[sửa | sửa mã nguồn]

Persistence Ignorance[sửa | sửa mã nguồn]

Tham khảo[sửa | sửa mã nguồn]

  1. ^ Domain driven design .
  2. ^ Evans, Eric (2004). Domain-Driven Design: Tackling Complexity in the Heart of Software. Addison-Wesley. ISBN 978-032-112521-7. Truy cập ngày 12 tháng 8 năm 2012. .