我有一个N层体系结构,现在我需要添加与仓库系统的集成。 我创建了集成,现在可以像这样使用它了:
var provider = IntegrationFactory.GetDataProvider("integration name");
var integrationOrders = await provider.Orders.GetAllAsync();
有什么问题-我有一个服务层,通常可以与我的DAL一起使用,例如CRUD操作和填充DTO模型。 我必须创建一种方法来与集成订单同步我的订单-让我们将这种方法称为“ SyncIntegrationOrders”,从集成端获取所有订单,并将其与数据库中的订单同步,所以我并不是真的了解是否可以在我用于DAL的OrderService中保留此方法? 否则会破坏SRP原则... 但是无论如何,当我想要SyncIntegrationOrders时,我也需要DAL层。 预先感谢。
答案 0 :(得分:0)
我不会混合同步和订购服务,因为:
1)同步服务添加了一些与订购服务无关的依赖项,例如IntegrationFactory,外部数据源等
2)同步服务可以具有与订单服务无关的特定功能:例如故障恢复,远程端的数据一致性,合并订单,解决合并冲突等
3)它简化了单元测试
4)它易于将应用分解,例如分解为微服务
一些评论:
同步服务需要尽快与订单服务而非DAL进行通信/相互依赖,否则它可以复制订单服务中定义的某些业务逻辑
订购服务需要尽快不接受/返回DTO,它会操纵业务实体(DTO的引入较高-在Facade或“演示文稿”中(例如Controller,ApiController ..))
解耦:订购服务应仅将某些事件(例如“订购创建”等)通知系统,而不是单独调用同步服务。同步服务订阅必需的事件并根据其逻辑进行处理(例如,进行批处理)。