Tôi đang thiết kế một ứng dụng ASP.NET MVC bằng cách sử dụng Onion Architecture được mô tả bởi Jeffrey Palermo.Phụ thuộc vào kiến trúc Onion trong cùng một lớp: Cơ sở hạ tầng và Web giao tiếp
Đây là dự án ASP.NET MVC 2.0, nơi tôi yêu cầu tất cả các chế độ xem được nhập mạnh mẽ bằng cách sử dụng Mô hình xem chuyên dụng - chúng tôi sẽ không chuyển mô hình miền cho chế độ xem của mình. Chúng tôi đang sử dụng AutoMapper để thực hiện việc dịch - AutoMapper bị cô lập trong cơ sở hạ tầng, Web không biết hoặc quan tâm rằng AutoMapper đang được sử dụng.
Hiện tại, tôi đang xác định giao diện IViewModelMapping trong dự án Web - đơn giản vì dịch vụ này sẽ được Bộ điều khiển sử dụng và nó có quyền truy cập trực tiếp vào Mô hình chế độ xem của riêng nó. Bằng cách này, giao diện có thể truy cập cả hai Mô hình Miền (trong Lõi) và Mô hình Xem (trong Web).
Để cung cấp việc triển khai thực tế các giao diện IViewModelMapping, tôi đã tạo một không gian tên ObjectMapping trong dự án Cơ sở hạ tầng, sẽ tách biệt việc thực hiện ánh xạ thực tế với Intrastructure của hành tây. Khi làm như vậy, điều này sẽ yêu cầu cơ sở hạ tầng để có sự phụ thuộc vào BOTH Core và Web.
Câu hỏi của tôi là: vì cả hai dự án này về mặt kỹ thuật ở ngoại ô của hành tây (trong cùng một lớp) - là một dự án được phép phụ thuộc vào một dự án khác trong lớp đó? Có ai nhận thấy bất kỳ cạm bẫy tiềm năng nào với thiết kế này không?
Một thiết kế thay thế sẽ di chuyển các giao diện IViewMapper vào Core - nhưng điều này là không thể vì Core không có quyền truy cập vào các lớp ViewModel. Tôi cũng có thể di chuyển các mô hình khung nhìn vào Core, nhưng tôi cảm thấy như chúng sẽ không thuộc về đó, vì chúng đặc trưng cho lớp UI.
Kiến trúc được đề xuất như sau - thông báo rằng Cơ sở hạ tầng có sự phụ thuộc vào Lõi và Web. Web vẫn bị cô lập và chỉ có quyền truy cập vào logic nghiệp vụ cốt lõi.
http://www.matthidinger.com/images/onion-arch.png
Thiết kế cuối cùng bạn đã chọn và làm việc là gì? Thú vị để xem sơ đồ cập nhật với một số cấu trúc lớp cho Ánh xạ :) –
Câu hỏi: Tại sao lớp Độ phân giải _Dependency_ có sự phụ thuộc vào _Web Layer_? Không nên _Controllers_ có một sự phụ thuộc vào _Dependency Resolution Layer_? – a11smiles