Asp.net-Mvc
洋蔥架構:業務服務介面和實現
我正在學習洋蔥架構。我對服務層有一個困惑,因為我看到有人說核心層應該只包含:
- 楷模
- 儲存庫介面
- 服務介面
但其他人表示它也應該實現服務介面。那麼應該在哪一層實現服務介面呢?
我認為基礎設施層應該實現:
- 儲存庫介面
- 服務介面
並在請求時將它們注入 UI 層和測試層。
謝謝!
核心層應包含:
- Models/Entities/POCOs/Whatever_the_name…都是關於域對象的
- 所有介面(包括儲存庫和服務)
- 您的核心業務服務實施**(*)**
**(*)**如果你的業務是處理訂單,那麼你的實現
IWorkOrderService應該在核心層。如果您WorkOrderService需要訪問讓我們說 aShippingService(這不是您的業務),那麼它只會操縱IShippingService核心層中定義的內容,而IShippingService實現將在基礎設施層的某個地方。如果您
WorkOrderService需要,OrderRepository它將以同樣的方式完成。這是一個程式碼範例:
namespace MyBusiness.Core.Services { internal class WorkOrderService: IWorkOrderService { public WorkOrderService(IOrderRepository orderRepository, IShippingService shippingService) { _orderRepository = orderRepository; _shippingService = shippingService; } ... } }這將取決於洋蔥架構的最外層——依賴解析層——在執行時將所有介面與正確的服務實現綁定。
For<IWorkOrderService>().Use<Core.Services.WorkOrderService>(); For<IShippingService>().Use<Infrastructure.Services.ShippingService>(); For<IOrderRepository>().Use<Infrastructure.Data.OrderRepository>();