Kỹ thuật thiết kế theo miền, thuật ngữ gọi là “Domain Driven Design” (DDD) được sử dụng để giải quyết các vấn đề phức tạp trong thiết kế và phát triển phần mềm. DDD được áp dụng dựa trên các miền nghiệp vụ của bài toán. Đề cập tới kỹ thuật này, tác giả Eric Evans nhấn mạnh vào ba nguyên tắc cốt lõi sau [13]:
• DDD tập trung chính vào miền nghiệp vụ cũng như các miền logic nghiệp vụ cốt lõi của bài toán.
• Các bản thiết kế phức hợp đều dựa trên các mô hình của miền.
• Khi áp dụng DDD, cần có sự cộng tác giữa các chuyên gia về nghiệp vụ cũng như các đội ngũ chuyên môn kỹ thuật nhằm giải quyết các bài toán liên quan. Hệ thống microservices được tổ chức và xây dựng dựa trên các chức năng của miền nghiệp vụ cho từng bài toán. Mỗi một microservice đại diện cho một chức năng nghiệp vụ trong một miền xác định. Sử dụng DDD cho phép các nhà phát triển có thể phân rã chức năng hệ thống thành nhiều miền khác nhau. Công đoạn thiết kế kiến trúc bao quanh các miền logic đem lại một cách thức tiếp cận tự nhiên và dễ dàng trong phân hoạch, quản lý các module của chương trình.
Trong khuôn khổ của luận văn, tác giả không đi sâu vào trình bày phương pháp và các kỹ thuật cụ thể của DDD. Ở đây, tác giả chỉ tóm lược lại một số thuật ngữ cốt lõi được sử dụng trong phương pháp DDD [14].
• Ngữ cảnh riêng (bounded context): là thành phần trung tâm của DDD. Nó quản lý tập hợp các miền, và là nơi để định nghĩa ra các miền cũng như các miền con.
• Logic miền (domain logic): liên quan tới các quy tắc nghiệp vụ của bài toán. Logic miền là nơi mà các quy tắc nghiệp vụ của bài toán cần xác định các tác vụ như tạo, lưu trữ hay cập nhật dữ liệu.
• Mô hình miền (domain model): chứa các thông tin, tri thức cũng như dữ liệu và các mẫu thiết kế mà chúng ta cần để giải quyết bài toán.
• Miền con (subdomain): mỗi một miền sẽ được phân rã thành các miền con để tham chiếu đến các phần khác nhau trong logic nghiệp vụ bài toán.
• Mẫu thiết kế (design patterns): cung cấp các giải pháp chung nhất nhằm giải quyết các vấn đề phổ quát, lặp đi lặp lại.
Hình 1.10 minh họa các đối tượng cơ bản của một hệ thống quản lý bán hàng. Các đối tượng miền ở đây bao gồm đơn hàng (order), khách hàng (customer) và sản phẩm (product).
21
Hình 1.10. Miền nghiệp vụ hệ thống quản lý bán hàng
Sau khi phân rã các miền nghiệp vụ, mỗi một microservice sẽ được thiết kế để đảm bảo thực hiện các nhiệm vụ bao quanh miền nghiệp vụ của nó. Hình 1.11 minh họa tổng quát kiến trúc cho một module (order microservice) được tổ chức thành ba thành phần chính bao gồm:
• Lớp ứng dụng (application layer): kết xuất dữ liệu của hệ thống và xuất bản ra cho phía người dùng thông qua các Web API.
• Lớp miền nghiệp vụ (model layer): đóng gói các quy tắc nghiệp vụ, các thực thể liên quan đến miền nghiệp vụ và cả các đối tượng thực hiện việc trung chuyển dữ liệu (data transfer object).
• Lớp hạ tầng (infrastructure layer): chịu trách nhiệm lưu trữ dữ liệu thông qua các kỹ thuật như ORM9 và có thể đảm nhiệm các tác vụ khác như ghi nhật ký (logging) hay mã hóa dữ liệu.
Hình 1.11. Tổ chức của một microservice
22
Sử dụng DDD là một phương pháp hữu hiệu để phân hoạch các bài toán lớn, có độ phức tạp cao. Trong việc thiết kế microservices, áp dụng DDD cho phép đảm bảo được tính đóng gói, đơn nhiệm và giảm thiểu sự phụ thuộc chặt chẽ giữa các module.