【发布时间】:2018-05-18 20:42:46
【问题描述】:
我有一个带有后期操作的 api。我们使用 C# 并为每一层(Api、业务逻辑、数据访问)提供单独的程序集
此操作必须与多个数据源交互。
- 检查数据源1中是否已经存在数据
- 如果数据源1中不存在,则检查数据源2中是否已经存在数据
- 如果数据源2中不存在,先插入数据源1再插入数据源2
我们定期使用服务(用于逻辑)和存储库进行数据访问。
选项 1
- 为每个数据源创建一个存储库,每个数据源都有一个获取操作和一个插入操作。
- 创建一个使用两个存储库并遵循上述逻辑的服务。
优点是所有的逻辑都在服务中,感觉有点“单一职责”。这样做的缺点是以后有人可以直接使用“数据源 1 存储库”并插入一条记录,而不知道它也应该插入到数据源 2 中。
选项 2 使用与两个数据源交互的单个获取和插入操作创建一个存储库。这将确保您无法在没有其他人的情况下与一个人互动,但感觉不像“单一职责”。
选项 3 有 3 个存储库....
- 数据源 1 的 1 个存储库(但只有一个内部接口,因此不能被其他程序集使用)
- 数据源 2 的 1 个存储库(但只有一个内部接口,因此不能被其他程序集使用)
- 1 个具有公共接口的存储库,可由服务使用(在不同的程序集中)
公共存储库可以使用 2 个“特定于数据源”的存储库并遵循上述逻辑。这将逻辑从服务转移到存储库,但其优点是实现对数据层之外的任何人都隐藏。
人们的想法是什么?有这方面的设计模式吗?
【问题讨论】:
-
数据源是否具有相同的结构和架构?
-
We regularly make sure of services and repositories- 我不明白这是什么意思,你能澄清一下吗? -
嗨@CodingYoshi - 数据源不相同。数据源 1 用于全新系统。数据源位于旧数据库中,并保存数据源 1 的密钥以及一些附加值。
-
@CraigBroadman 您仍然可以在我的回答中使用我的解决方案。数据结构是否相同。
-
@ConstantinGalbenu 这是一个错字 - 意思是说我们经常使用 - 我已经更新了
标签: c# design-patterns domain-driven-design repository-pattern solid-principles