Thiết kế theo miền dữ liệu là một phương pháp trong phát triển phần mềm phức tạp, tập trung vào logic của lĩnh vực kinh doanh (domain business).
Thuật ngữ này được đề xuất bởi Eric Evans trong cuốn sách cùng tên.
Các khái niệm
Miền
Định nghĩa đơn giản nhất về miền ở đây là, ví dụ trong một hệ thống thương mại điện tử (e-commerce system) thì sản phẩm, đơn đặt hàng, khách hàng... và các khái niệm như khách hàng có thể đặt một sản phẩm, một đơn hàng có thể được thanh toán bởi một khách hàng chính là thuộc về miền.
những phần kỹ thuật bao gồm xử lý yêu cầu, biểu mẫu, kết nối cơ sở dữ liệu, lưu trữ thông tin nằm ngoài miền.
Ngôn ngữ phổ cập
Một ngôn ngữ có cấu trúc xoay quanh miền được sử dụng bởi tất cả các thành viên trong nhóm phát triển (lập trình viên, chuyên gia miền, khách hàng) để 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 vấn đề khó khăn tồn tại khi doanh nghiệp thường không hiểu được những ngôn ngữ kỹ thuật phía dưới, và nhà phát triển không hiểu logic kinh doanh của sản phẩm. 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 một cách nhất quán.
Ngữ cảnh và Phạm vi Ngữ cảnh
Phạm vi Ngữ cảnh được dịch là Phạm vi Giới hạn.
Phạm vi giới hạn có thể được hiểu như một ứng dụng con, bao gồm các mô hình của riêng nó và mã nguồn cùng cơ chế lưu trữ riêng. Trong phạm vi giới hạn cần có sự thống nhất hợp lý, mỗi phạm vi giới hạn nên hoạt động độc lập với bất kỳ phạm vi giới hạn nào khác. Ví dụ, trong hệ thống thương mại điện tử, chúng ta có thể coi chương trình của mình trong ngữ cảnh của cửa hàng (shopping), nhưng chi tiết hơn, chúng ta có thể nhìn thấy các ngữ cảnh khác như Hàng tồn kho (Inventory), Giao nhận (Delivery) và Tài khoản (Account).
Chia một ứng dụng lớn thành các ngữ cảnh khác nhau một cách hợp lý sẽ giúp chúng ta modular hóa hệ thống, cho phép chúng ta phân tách các mối quan tâm khác nhau vào các phần độc lập và làm cho việc quản lý và nâng cấp ứng dụng trở nên dễ dàng hơn.
Thực thể và Đối tượng Giá trị
Entities và Value Objects là các thành phần xây dựng trong Thiết kế Định hướng Miền và là nền tảng để xây dựng Mô hình Miền. Tất cả các đối tượng này đều được xác định từ Ngôn ngữ Phổ biến và có các đặc tính, hành vi phản ánh chính xác nghiệp vụ của miền (Domain Business). Trong DDD, những đối tượng này được đặt trong lớp miền (Domain Layer) và được cô lập với các thành phần bên ngoài lớp miền này.
Entity và Value Object đều là các đối tượng miền, tuy nhiên, giữa chúng có những sự khác biệt cơ bản và quan trọng để phân biệt.
Cụ thể:
- Các thực thể (Entities) có một định danh (Identity) riêng của chúng trong khi các đối tượng giá trị (Value Objects) thì không.
- So sánh các thực thể dựa trên định danh (Identity), trong khi so sánh các giá trị trong đối tượng đối với các đối tượng giá trị (Value Objects).
- Một Value Object luôn phải thuộc về ít nhất một Entity hoặc nhiều hơn.
- Một Entity có thể thay đổi trạng thái (Mutable) trong khi một Value Object thì không (Immutable).