2012-12-24 17 views
17

Eric trong cuốn sách của mình chạm vào chủ đề của Mô-đun rất ít. Ông cũng không nói về mối quan hệ của cấu trúc của các mô-đun với các bối cảnh bị ràng buộc với các ví dụ. Các bối cảnh bị ràng buộc có chứa các mô-đun hoặc mô-đun có chứa các bối cảnh bị ràng buộc không? Khi một ứng dụng có DDD, bạn có thể mở rộng dễ dàng như thế nào?Extensibiliy với DDD: Mô-đun Vs Bounded Bối cảnh trong DDD với MEF

Cấu trúc của ứng dụng là rất quan trọng khi chúng tôi thiết kế các ứng dụng có thể mở rộng. Khung công tác MEF của Microsoft có thể tự động khám phá các mô-đun/thành phần từ một dll.

Chúng ta hãy lấy một ví dụ. Trong ứng dụng thương mại điện tử, chúng tôi có thể có ngữ cảnh bị ràng buộc cho Xử lý thanh toán. Việc xử lý thanh toán có thể được trừu tượng, vì vậy sau này tôi có thể mở rộng ứng dụng với nhiều bộ xử lý thanh toán như Paypal hoặc Payflow hơn. Hiện tại tôi chỉ có Paypal, và vài tháng sau tôi muốn tích hợp Payflow. Để tích hợp Payflow, tôi có thể lắp ráp (dll) thực hiện giao diện của Xử lý thanh toán. Tôi có thể thả dll đó trong ứng dụng, và MEF sẽ tự động phát hiện ra nó.

Thách thức ở đây là, dll được tạo cho xử lý thanh toán PayFlow là một mô-đun, không phải là Ngữ cảnh bị ràng buộc (BC). Nếu tôi tạo nó làm BC, chúng tôi có hai BC cho Xử lý thanh toán. (BC tạo ra cho Paypal và BC cho Payflow). Nếu chúng ta cấu trúc ứng dụng với các mô-đun bên trong Bounded Context và Bounded Context như một assembly (dll), các module có thể nằm trong BC như các thư mục chứ không phải assembly (bạn có thể coi nó như một thư viện C# được tạo trong Visual Studio).

Làm cách nào chúng tôi có thể xử lý vấn đề mở rộng này với DDD? Có phải là Xử lý thanh toán, BC và các thư mục khác bên dưới nó dưới dạng mô-đun, một cho Paypal vv ... Hay chúng ta cần phụ BC trong một BC khác?

Trả lời

17

Eric trong cuốn sách của mình chạm vào chủ đề của Mô-đun rất ít. Ông cũng không nói về mối quan hệ của cấu trúc của các mô-đun đến ngữ cảnh bị ràng buộc với các ví dụ.

Có, tôi đồng ý rằng mô-đun và cấu trúc BC không có đủ mức độ phù hợp trong sách. Tôi khuyên bạn nên Implementing Domain-Driven Design by Vaughn Vernon để biết thêm về điều này.

Các bối cảnh bị ràng buộc có chứa mô-đun hoặc mô-đun chứa Ranh giới Các bối cảnh?

BC chứa mô-đun. Một mô-đun giống như một BCs nhẹ và cũng thuộc về ngôn ngữ phổ biến.

Khi ứng dụng có DDD, bạn có thể mở rộng dễ dàng như thế nào?

Điều đó phụ thuộc vào cách bạn kiến ​​trúc sư. Không có gì về DDD chính nó sẽ ngăn chặn khả năng mở rộng.

Xử lý thanh toán, BC và các thư mục khác bên dưới nó là mô-đun, một cho Paypal vv ... Hoặc chúng ta cần phụ BC trong BC khác?

Tôi sẽ mô hình hóa từng bộ xử lý thanh toán tích hợp làm mô-đun trong một BC xử lý thanh toán duy nhất. Ngoài ra, mỗi tích hợp là ACL giữa mô hình xử lý thanh toán của bạn và bên thứ ba, chẳng hạn như PayPal.

Hoặc chúng ta cần phụ BC trong một BC khác?

Không, nhưng điều này chạm vào một khái niệm thú vị về phụ BC. Tôi không nghĩ rằng một BC phụ là một ý tưởng tốt bởi vì tôi tin rằng các tổ chức phân cấp có thể nguy hiểm dẫn đến các thiết kế cứng nhắc (xem OOP với các hệ thống phân cấp kiểu rõ ràng - có thể có vấn đề). Thay vào đó, hãy chọn một mô hình phẳng hơn với nhiều BC hơn. Ngoài ra, trong trường hợp của bạn, cấu trúc mong muốn có thể đạt được với các mô-đun.

+1

Câu trả lời tuyệt vời @eulerfx! – Bern