Thiết kế hướng miền (Domain Driven Design – DDD)

Thiết kế DDD
Thiết kế hướng miền (DDD) là một phương pháp thiết kế phần mềm chính. Nó tập trung vào mô hình phần mềm phù hợp với miền thông qua thông tin từ chuyên gia. Cấu trúc, ngôn ngữ của mã (tên lớp, phương thức lớp, biến lớp) phải phù hợp với miền kinh doanh. Ví dụ: nếu phần mềm xử lý các đơn xin vay, nó có thể có các lớp như đơn xin vay, khách hàng và các phương thức như chấp nhận đề nghị và rút tiền. Nó được xác định dựa trên các mục tiêu sau:
  • đặt trọng tâm chính của dự án vào miền lõi và logic miền;
  • dựa trên các thiết kế phức tạp trên một mô hình của miền;
  • Khởi xướng sự hợp tác giữa chuyên gia kỹ thuật và lĩnh vực để tinh chỉnh mô hình khái niệm giải quyết vấn đề lĩnh vực cụ thể.
Nhà phát triển thường phải thực hiện nhiều cô lập và đóng gói để duy trì mô hình thuần túy. Mặc dù DDD mang lại lợi ích bảo trì, Microsoft chỉ khuyến nghị áp dụng nó cho các miền phức tạp với lợi ích hiểu biết chung.

Tổng quan về thiết kế DDD

Thiết kế hướng tên miền nêu rõ một số khái niệm và thực tiễn cấp cao. Tầm quan trọng hàng đầu là miền. Đây là lĩnh vực chủ đề mà người dùng áp dụng chương trình là miền của phần mềm. Miền phần mềm xác định ý nghĩa của ngữ cảnh và từ/câu lệnh. Từ đó, Nhà phát triển xây dựng mô hình miền để mô tả và giải quyết vấn đề liên quan đến miền. Các khía cạnh này của thiết kế hướng miền nhằm mục đích thúc đẩy một ngôn ngữ chung được chia sẻ bởi các chuyên gia miền, người dùng và nhà phát triển. Ngôn ngữ phổ biến được sử dụng trong mô hình miền và để mô tả các yêu cầu hệ thống. Ngôn ngữ phổ biến là một trong những trụ cột của DDD cùng với thiết kế chiến lược, chiến thuật. Trong thiết kế, lớp miền là một trong những lớp phổ biến trong kiến trúc đa lớp hướng đối tượng.

Các loại mô hình

Thiết kế hướng miền nhận dạng nhiều loại mô hình. Ví dụ, một thực thể là một đối tượng được xác định không phải bởi các thuộc tính của nó, mà bởi danh tính của nó. Các hãng hàng không chỉ định một số duy nhất cho ghế trên mỗi chuyến bay để nhận dạng ghế. Ngược lại, một đối tượng giá trị là một đối tượng bất biến có chứa các thuộc tính nhưng không có danh tính khái niệm. Các mô hình cũng có thể xác định các sự kiện (điều gì đó đã xảy ra trong quá khứ). Sự kiện miền là sự kiện mà các chuyên gia miền quan tâm. Các mô hình có thể kết hợp thành một tập hợp thông qua một thực thể gốc. Đối tượng bên ngoài chỉ giữ tham chiếu đến thực thể gốc, không đến thành phần khác. Gốc tổng hợp đảm bảo tính nhất quán của các thay đổi trong tập hợp, giống như việc lái ô tô không đòi hỏi điều khiển từng bánh xe riêng lẻ mà chỉ cần lái ô tô, vì ô tô là một tập hợp của nhiều đối tượng khác nhau như động cơ, phanh, đèn pha, v.v.

Làm việc với mô hình

Trong thiết kế hướng miền, việc tạo đối tượng thường được tách biệt khỏi chính đối tượng đó. Khi một phần chức năng của chương trình về mặt khái niệm không thuộc bất kỳ đối tượng nào, thì nó thường được biểu thị dưới dạng dịch vụ.

Mối liên hệ của thiết kế với những ý tưởng khác

Thiết kế hướng miền vốn không gắn liền với các phương pháp hướng đối tượng. Nhưng trên thực tế, nó khai thác các lợi thế của các kỹ thuật đó. Chúng bao gồm thực thể/người nhận lệnh, gốc tổng hợp trạng thái, và bối cảnh cấp cao. Thiết kế hướng miền đã ảnh hưởng đến các cách tiếp cận khác để phát triển phần mềm. Mô hình dành riêng cho miền là thiết kế hướng miền được áp dụng với các ngôn ngữ dành riêng cho miền. Thiết kế hướng miền không yêu cầu cụ thể việc sử dụng ngôn ngữ dành riêng cho miền. Mặc dù nó hỗ trợ xác định ngôn ngữ và đa mô hình dành riêng cho miền. Đổi lại, lập trình hướng khía cạnh loại bỏ mối quan tâm kỹ thuật, tập trung vào logic nghiệp vụ.

Kỹ thuật và kiến trúc dựa trên mô hình

Thiết kế hướng miền tương thích với kỹ thuật hướng mô hình và kiến trúc hướng mô hình. Tuy vậy, mục đích đằng sau hai khái niệm là khác nhau. Kiến trúc hướng mô hình chú trọng đến việc chuyển đổi mô hình thành mã cho các nền tảng khác. Tuy nhiên, các kỹ thuật do kỹ thuật hướng mô hình cung cấp (để lập mô hình miền, tạo ngôn ngữ dành riêng cho miền để tạo điều kiện giao tiếp giữa các chuyên gia miền và nhà phát triển,…). Các kỹ thuật định hướng mô hình giúp sử dụng mô hình miền trong việc phát triển hệ thống phần mềm thực tế.

Phân tách trách nhiệm truy vấn lệnh

Phân chia trách nhiệm truy vấn lệnh (CQRS) là một mẫu kiến trúc để tách dữ liệu đọc (một ‘truy vấn’) khỏi ghi vào dữ liệu (một ‘lệnh’). CQRS bắt nguồn từ Phân tách lệnh và truy vấn (CQS), do Greg Young đặt ra. Các lệnh thay đổi trạng thái, gần tương đương lời gọi phương thức các gốc hoặc thực thể tổng hợp. Truy vấn đọc trạng thái nhưng không thay đổi nó. Mặc dù CQRS không yêu cầu thiết kế hướng miền, nhưng nó tạo ra sự khác biệt rõ ràng giữa các lệnh và truy vấn với khái niệm gốc tổng hợp. Ý tưởng là gốc tổng hợp có phương thức tương ứng với lệnh và trình xử lý lệnh gọi phương thức đó. Gốc tổng hợp chịu trách nhiệm thực hiện logic của hoạt động và tạo ra một số sự kiện. Nó phản hồi lỗi hoặc chỉ thay đổi trạng thái của chính nó. Để có thể được ghi vào kho lưu trữ dữ liệu. Trình xử lý lệnh quản lý lưu trạng thái của gốc tổng hợp và tạo ngữ cảnh như giao dịch.

Nguồn cung ứng sự kiện

Tìm nguồn sự kiện là một mẫu kiến trúc đọc và chuyển giao sự kiện cho kho lưu trữ sự kiện. CQRS và thiết kế hướng miền thường kết hợp để tạo ra các gốc tổng hợp. Các gốc tổng hợp xác thực và thực hiện các lệnh, sau đó xuất bản sự kiện. Chúng đóng vai trò quan trọng trong xử lý lời gọi, sản xuất sự kiện, lưu trữ và thông báo.
Lập mô hình gốc tổng hợp cho sự kiện đầu ra giúp cô lập trạng thái bên trong hơn khi đọc từ thực thể. Ví dụ như trong các kiến trúc truyền dữ liệu n tầng tiêu chuẩn. Một lợi ích đáng kể là các trình chứng minh định lý tiên đề. Nó dễ áp dụng hơn vì gốc tổng hợp che giấu toàn diện trạng thái bên trong của nó.

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です