我有Domain
汇编和SqlServerRepository
汇编。
SqlServerRepository
程序集有关于Domain
程序集的引用,Domain
程序集没有引用其他程序集。
Domain
程序集具有接口IRepository
(以及其他存储库),因为域逻辑仅适用于接口类型,并且不考虑具体类型。
SqlServerRepository
程序集实现接口IRepository
(包含在Domain
程序集中)。
没关系,我可以模仿IRepository
,可以使用OracleRepository
实施和其他...
但我认为我有一些架构问题......
SqlServerRepository
无法在没有Domain
汇编SqlServerRepository
程序集中,Domain
将无法在没有SqlServerRepository
程序集的情况下工作,如果我创建OracleServerRepository
程序集,我必须使用SqlServerRepository
也是,因为我将接口放在SqlServerRepository
和Domain
alredy中使用它们。SqlServerRepository
或Domain
汇编中?我想过一个只包含接口的程序集,而Domain
和SqlServerRepository
引用它,但我认为这是我项目的开销(微服务)
那么,我该怎么办?
答案 0 :(得分:4)
存储库接口属于域(或者更确切地说,属于您的服务,但它们通常是域的一部分)。
原因是存储库合同是根据域所需的功能创建和驱动的。没有域名,您就没有任何存储库。
没有域程序集
,SqlServerRepository无法工作
正确。正如我上面所说的那样。如果不是域名所需的功能,则不会有SqlServerRepository
。
我应该将数据库对象映射到域?在
SqlServerRepository
或Domain
汇编中?
在存储库程序集中,因为它是特定数据层抽象的实现细节。如果您将它们放在域中,那么域将被迫了解您正在使用的每个持久层的实现细节(如oracle,sqlserver,files或其他)。
没有什么说SQL Server和Oracle应该使用相同的数据库模式来保存信息。表,视图等可能会有所不同,具体取决于数据库引擎的优缺点。
答案 1 :(得分:0)
我建议你使用端口和适配器[六边形架构]来实现。组装后可以用于微服务
MyService程序集将引用Common.ServiceContracts,Infrastructure和Core.Domain。
您可以根据需要模拟MyService程序集中的任何存储库/域。服务使用者可以使用MyService程序集。