2015-09-10 12 views
5

Tôi làm việc trên một ứng dụng phụ trợ lộ ra một API REST và tôi (cố gắng) sử dụng Domain Driven Design trong dự án của tôi.Các lớp cơ sở hạ tầng API có nên là một phần của miền trong DDD không?

API REST hoạt động trên một nhóm lớp miền cố định. Đối với tất cả các root agregate từ miền có một điểm cuối REST riêng biệt. Tuy nhiên, bất chấp tất cả những nỗ lực này, có những trường hợp khi các lớp học mới, không phát sinh từ các lớp miền (lớp cơ sở hạ tầng) xuất hiện, ví dụ:

  • một trạng thái lớp tổ chức các hoạt động hàng loạt [{"id": 1, "status": "success"},{"id": 2, "status": "failure", "message": "detailed message"}]
  • một lớp học với các cột được lựa chọn bởi người dùng [{"column": "id", "order": 1}, {"column":"created", "order": 2 }]

Bây giờ hai lựa chọn:

  • là nó ok để có REST API tiếp xúc với các lớp học mà không phải là một phần của lĩnh vực?
  • hoặc các lớp này có nên trở thành một phần của miền không?
+1

Tôi nghĩ hoàn toàn hợp lý khi hiển thị các hợp đồng cụ thể theo từng lớp. Ví dụ, DTO thường được định nghĩa trong lớp ứng dụng ... – plalx

Trả lời

5

Bạn không nên cố gắng xây dựng API REST trực tiếp với mô hình miền của mình. Có khá nhiều trách nhiệm mà bạn cần cho một giao diện như vậy sẽ làm hỏng mô hình miền của bạn. Ví dụ. kiểm soát giao dịch, bảo mật, xác thực đầu vào là những thứ bạn có thể cần, nhưng không thuộc về mô hình miền.

Đây là dịch vụ ứng dụng dành cho.

xây dựng một mỏng lớp xung quanh mô hình tên miền của bạn có chứa các dịch vụ ứng dụng (thường được gọi là Dịch vụ Lớp). Các dịch vụ ứng dụng là các máy khách trực tiếp của mô hình miền. Chúng thường được tổ chức xung quanh Trường hợp sử dụng thay vì tổng hợp. Giờ đây, API REST của bạn là ứng dụng khách trực tiếp của các dịch vụ ứng dụng thay vì mô hình miền.

Hai lớp mà bạn đề cập sau đó sẽ phù hợp với lớp dịch vụ một cách độc đáo.

Edit:

Lưu ý rằng khi sử dụng hình lục giác Kiến trúc (đó là một sự phù hợp tốt cho DDD), lớp dịch vụ là không giống như các lớp kiên trì. Lớp dịch vụ sử dụng lớp để lưu trữ và lưu tổng hợp vào DB.

+0

Cơ sở hạ tầng lớp ứng dụng có thuyết phục không? Vậy khung công tác REST là ứng dụng khách đầu tiên của lớp ứng dụng? – danfromisrael

+0

@danfromisrael xem câu trả lời cập nhật của tôi – theDmi

+0

Cảm ơn @ theDmi vì câu trả lời. Tôi hoàn toàn đồng ý với cách tiếp cận mà bạn đã mô tả, nhưng tôi có một câu hỏi. Giả sử chúng ta có phương thức GET trả về một danh sách các đối tượng, mỗi đối tượng đều có một cột trạng thái. Bây giờ chúng ta cần tạo một phương thức GET mới để trả về một danh sách các trạng thái duy nhất cùng với số lượng các phần tử có trạng thái này. Với mục đích này, chúng ta tạo một lớp DTO mới với hai thuộc tính: 'String status' và' Long count'. Trong lớp nào lớp này nên được định nghĩa? Ứng dụng, phải không? Nếu kho lưu trữ, dựa trên DDD, trả về các cá thể của các lớp của lớp ứng dụng? –

Các vấn đề liên quan