【发布时间】:2019-05-09 23:19:11
【问题描述】:
我有一个 N 层架构,现在我需要添加与仓库系统的集成。 我创建了集成,现在我可以像这样使用它:
var provider = IntegrationFactory.GetDataProvider("integration name");
var integrationOrders = await provider.Orders.GetAllAsync();
什么问题 - 我有一个服务层,它通常与我的 DAL 一起使用,例如 CRUD 操作和填充 DTO 模型。 我必须创建将我的订单与集成订单同步的方法 - 让我们将此方法称为“SyncIntegrationOrders”,我将从集成端获取所有订单并将它们与我的数据库中的订单同步,所以我真的不了解是否可以将此方法保留在我用于处理 DAL 的 OrderService 中? 否则会破坏 SRP 原则... 但无论如何,当我想要 SyncIntegrationOrders 时,我也需要 DAL 层...... 提前致谢。
【问题讨论】:
-
我了解到您想添加将数据发布到数据库的方法,您可以在服务层中再添加一项功能。因此,在您的服务中,有 2 种方法:GET 和 POST。这应该没问题。如果您认为我误解了您的情况,请添加评论。
-
您可以在 orderservice 类中同步订单,这是您业务逻辑的一部分。您的 orderservice 类不仅仅存在于它可以接触 DAL 的位置,它还用于与所有外部资源交互并应用与订单有关的业务规则。如果你的 DAL 中有同步顺序方法,那就错了。
-
@JohanP 谢谢。另一个问题 - 如果我需要向集成发送特定订单?例如,我可以通过 id 从我的数据库中获取订单,我需要将其发送给我的集成提供商,如 provider.Orders.Create(orderFromMyDatabase)。我还能像“SendOrderToIntegration”一样将它放在我的 OrderService 中吗?我担心,因为其他方法通常适用于我的 DAL,但是这个应该将数据发送到集成......这就像其他职责一样
-
@AlexKvitchastiy 绝对是的。 Orderservice 是与所有不同数据源交互的中心点。因此它将与您的数据库数据源以及外部数据源(即仓库)进行交互。