我有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
引用了它,但是我认为这对我的项目(微服务)来说是开销
那么,我该怎么办?
最佳答案
存储库接口属于域(或服务所在的位置,但是它们通常是域的一部分)。
原因是存储库合同是根据域所需的功能创建和驱动的。没有域,您将没有任何存储库。
没有Domain程序集,SqlServerRepository无法工作
正确。正如我上面所说。如果不是域所需的功能,您将没有SqlServerRepository
。
我应该在哪里将数据库对象映射到域?在SqlServerRepository
还是Domain
程序集中?
在存储库程序集中,它是特定数据层抽象的实现细节。如果将它们放在域中,则域将被迫具有有关所使用的每个持久层(例如oracle,sqlserver,文件等)的实现详细信息的知识。
什么也没有说SQL Server和Oracle应该使用相同的数据库架构来保留信息。表,视图等可能会有所不同,具体取决于数据库引擎的优缺点。
关于c# - 我应该在哪里放置接口(interface)和实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35986061/