Asp.net-Mvc

洋蔥架構:業務服務介面和實現

  • June 20, 2021

我正在學習洋蔥架構。我對服務層有一個困惑,因為我看到有人說核心​​層應該只包含:

  • 楷模
  • 儲存庫介面
  • 服務介面

但其他人表示它也應該實現服務介面。那麼應該在哪一層實現服務介面呢?

我認為基礎設施層應該實現:

  • 儲存庫介面
  • 服務介面

並在請求時將它們注入 UI 層和測試層。

謝謝!

核心層應包含:

  • Models/Entities/POCOs/Whatever_the_name…都是關於域對象的
  • 所有介面(包括儲存庫和服務)
  • 您的核心業務服務實施**(*)**

**(*)**如果你的業務是處理訂單,那麼你的實現IWorkOrderService應該在核心層。如果您WorkOrderService需要訪問讓我們說 a ShippingService(這不是您的業務),那麼它只會操縱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>();

引用自:https://stackoverflow.com/questions/16861127