2012-09-23 26 views
7

Trong các ứng dụng sau DDD tôi đã làm việc, chúng tôi có một Lớp dịch vụ chứa Dịch vụ + Kho lưu trữ + giao diện cho kho và dịch vụ, tất cả chúng đều nằm trong cùng một assembly, trong khi miền mô hình sẽ sống trong một hội đồng khác. Có vẻ như mọi thứ không phù hợp với mô hình miền đều lộn xộn trong một dự án lớn này.Kho lưu trữ đóng gói và giao diện của chúng trong DDD

Trong một ứng dụng tuân theo nguyên tắc và mẫu DDD, làm thế nào để bạn đóng gói các kho lưu trữ và các giao diện mà chúng triển khai? Các phương pháp hay nhất để đóng gói các phần logic khác nhau của ứng dụng DDD (hoặc bao bì nói chung cho vấn đề đó) là gì? Nên mỗi phân vùng hợp lý sống trong hội đồng của riêng mình? Liệu nó có quan trọng không?

Trả lời

5

Tôi sẽ xem xét Kiến trúc Onion. Về cơ bản, tất cả các mô hình miền và giao diện cho các dịch vụ miền đều được coi là cốt lõi. Lớp chỉ phụ thuộc vào các lớp ở trên chúng gần với lõi hơn. Việc triển khai thực tế của họ được xử lý bởi cơ sở hạ tầng.

Xem tại đây http://jeffreypalermo.com/blog/the-onion-architecture-part-1/

Cuối cùng, giao diện của bạn là những gì xác định ứng dụng của bạn. Logic của cách thức được triển khai thực hiện được bên ngoài. Vì vậy, tôi hy vọng bạn có các hội đồng với Mô hình miền và dịch vụ miền, giao diện người dùng (ví dụ: MVC v.v.) và sau đó là một cơ sở hạ tầng triển khai những thứ như NHibernate để cung cấp dữ liệu, v.v.

Bạn có thể xem các mẫu khác nhau triển khai kiến trúc trong các phần khác nhau của bài viết được liên kết. Đơn giản nhất là ở đây https://bitbucket.org/jeffreypalermo/onion-architecture/get/1df2608bc383.zip

Bạn có thể xem các câu hỏi liên quan đến nó ở đây https://stackoverflow.com/questions/tagged/onion-architecture

Lợi ích chính là nó phần lớn là những mối quan tâm cơ sở hạ tầng đó sẽ thay đổi thường xuyên nhất. Công nghệ lớp dữ liệu mới, lưu trữ tệp mới, v.v. Ngoài ra, tên miền cốt lõi của bạn nên được ổn định hợp lý vì nó không thực hiện bất cứ điều gì chỉ cần xác định bởi hợp đồng (giao diện) những gì nó yêu cầu. Bằng cách đặt các mối quan tâm thực hiện tại một địa điểm bạn giảm thiểu số lượng thay đổi sẽ được yêu cầu trên toàn bộ hội đồng của bạn.

+0

Tham chiếu tuyệt vời đến kiến ​​trúc hành tây mà tôi không hề biết. cảm ơn. – kabaros

0

Bạn có thể tìm thấy các nguyên tắc thiết kế lớp của mình trong DDD book. Bạn đã cơ bản nhận được:

  • miền
  • Cơ sở hạ tầng
  • Application
  • UI

Dịch vụ đi kèm trong 3 loại: Ứng dụng dịch vụ lớp, dịch vụ cơ sở hạ tầng và dịch vụ lớp lớp Domain, tùy thuộc về những gì dịch vụ làm. Đối với Repositories, các hợp đồng (giao diện) của chúng thường nằm trong Domain trong khi các triển khai cụ thể của chúng nằm trong tầng Infrastructure.

Về hội đồng, tôi khuyên bạn nên sử dụng ít nhất một lớp cho mỗi lớp. Tập hợp và dll là tất cả về reusability, tách mối quan tâm và tách - tôi sẽ có thể chọn dll đó và thả nó để tái sử dụng nó trong một ứng dụng khác? Tôi có thể làm như vậy mà không cần kéo theo một loạt các tính năng không liên quan sẽ mang lại sự phức tạp không cần thiết cho ứng dụng khác đó không? Tôi sẽ có thể thay thế dll của tôi một cách dễ dàng cho một số khác bằng cách chỉ thay đổi một dòng mã trong mô-đun phụ thuộc của tôi tiêm? và vân vân.

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