洋葱架构:业务服务接口和实现

rel*_*asr 13 asp.net-mvc ninject onion-architecture

我正在学习洋葱建筑.我对服务层感到困惑,因为我看到有些人说核心层应该只包含:

  • 楷模
  • 存储库接口
  • 服务接口

但其他人表示它也应该实现服务接口.那么什么层应该实现服务接口?

我认为基础设施层应该实现:

  • 存储库接口
  • 服务接口

并在请求时将它们注入UI层和测试层.

谢谢!

Max*_*xSC 22

核心层应包含:

  • 模型/实体/ POCOs/Whatever_the_name ......它都是关于域对象的
  • 所有接口(包括存储库和服务)
  • 您的核心业务服务实施(*)

(*)如果您的业务是关于处理订单,那么您的实施IWorkOrderService应该在核心层.如果你WorkOrderService需要访问让我们说ShippingService(这不是你的业务),那么它只会操纵IShippingService核心层中定义的,IShippingService实现将在基础架构层的某个地方.

如果你的WorkOrderService需要,OrderRepository它将以同样的方式激动地完成.

这是一个代码示例:

namespace MyBusiness.Core.Services
{
  internal class WorkOrderService: IWorkOrderService
  {
    public WorkOrderService(IOrderRepository orderRepository, IShippingService shippingService)
    {
      _orderRepository = orderRepository;
      _shippingService = shippingService;
    }

    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

这将取决于洋葱架构的最外层 - 依赖性解析层 - 在运行时将所有接口与正确的服务实现绑定在一起.

For<IWorkOrderService>().Use<Core.Services.WorkOrderService>();
For<IShippingService>().Use<Infrastructure.Services.ShippingService>();
For<IOrderRepository>().Use<Infrastructure.Data.OrderRepository>();
Run Code Online (Sandbox Code Playgroud)