我有Domain程序集和SqlServerRepository程序集。

SqlServerRepository程序集在Domain程序集上具有引用,Domain程序集在其他程序集上没有引用。

Domain程序集具有接口IRepository(其他用于存储库),因为域逻辑仅适用于接口类型,而不会考虑具体类型。

SqlServerRepository程序集实现接口IRepository(包含在Domain程序集中)。

没关系,我可以模拟IRepository,可以使用OracleRepository实现和另一个...

但我认为我有一些架构问题...


没有SqlServerRepository程序集,Domain无法工作
另一方面,如果将接口放在SqlServerRepository程序集中,则Domain在没有SqlServerRepository程序集的情况下将无法工作,并且如果创建OracleServerRepository程序集,我也必须使用SqlServerRepository,因为我将接口放入了SqlServerRepositoryDomain alredy使用它们。
我应该在哪里将数据库对象映射到域?在SqlServerRepository还是Domain程序集中?


我想到了只包含接口的程序集,并且DomainSqlServerRepository引用了它,但是我认为这对我的项目(微服务)来说是开销

那么,我该怎么办?

最佳答案

存储库接口属于域(或服务所在的位置,但是它们通常是域的一部分)。

原因是存储库合同是根据域所需的功能创建和驱动的。没有域,您将没有任何存储库。


  没有Domain程序集,SqlServerRepository无法工作


正确。正如我上面所说。如果不是域所需的功能,您将没有SqlServerRepository


  我应该在哪里将数据库对象映射到域?在SqlServerRepository还是Domain程序集中?


在存储库程序集中,它是特定数据层抽象的实现细节。如果将它们放在域中,则域将被迫具有有关所使用的每个持久层(例如oracle,sqlserver,文件等)的实现详细信息的知识。

什么也没有说SQL Server和Oracle应该使用相同的数据库架构来保留信息。表,视图等可能会有所不同,具体取决于数据库引擎的优缺点。

关于c# - 我应该在哪里放置接口(interface)和实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35986061/

10-09 02:25