dll - 在我的 C# 解决方案中,解耦架构中的接口(interface)应存储在哪里?

标签 dll architecture interface decouple

我知道这个问题之前似乎已经得到了回答,但我觉得答案因情况而异,所以在阅读了几篇文章后,我不确定在我的情况下哪一个最适合我的架构。

我有一个组件库,其中包含数据模型和基本功能,任何实现该组件的应用程序都可以使用这些功能。

这个组件有一个边界,它有一个接口(interface) IReader 来加载和处理来自磁盘的文件,以及 IDataMapper 来提供数据库访问和 CRUD 操作。 其他一些用于特定功能的接口(interface),例如用于比较对象的 IObjectComparison、用于 XML 序列化的 IXMLSerialization。

我不确定在哪里存储这些接口(interface)的定义。

选项是:

1)-在核心库中,当我编写实现时,我必须将实现库包含在这个核心组件中,并且我希望保持与实现的分离。

2)- 在单独的库项目(程序集)中。所有接口(interface)都包含在核心组件中,并包含在实现库中。

3) - 在实现库中,核心组件必须包含实现库。

唯一看起来合理解耦的情况是,如果我将所有接口(interface)放在一个单独的程序集库中,其中核心组件包含以及我可能需要的任何实现。

你们认为最佳选择的优点/缺点是什么? 我想要实现的只是一个解耦的架构。

所以当我这样做

构造函数:

CoreComponent(IReader Reader, IDataMapper Mapper)

new CoreComponent(WindowsReader, SQLServerMapper)

并且不必将 WindowsReaderSQLServerMapper 包含到核心组件中

干杯。

最佳答案

我会选择选项 1 - 核心库,因为它与我们在 DDD 中的做法一致。 。在 DDD 中,我们过去常常将 IRepository 接口(interface)放在域层中,而不是 DAL 或任何其他此类层。

DIP表示更高级别的组件将拥有该接口(interface),如 Wikipedia说...

where interfaces defining the behavior/services required by the high-level component are owned by, and exist within the high-level component's package.

这是最常见的做法,但不是严格的规则。

选项 2 很好,但您需要在其他项目中引用两个 DLL,但使用选项 1 只需要一个引用。选项 3 不合适。

希望能有所帮助。谢谢。

关于dll - 在我的 C# 解决方案中,解耦架构中的接口(interface)应存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24749839/

相关文章:

architecture - 思维导图依赖的软件

angular - 如何在前端和后端存储 JWT 刷新 token ?

Java - 在接口(interface)中使用两个同名的类

java - 为什么我不能在 Java 接口(interface)中定义静态方法?

c++ - 如何在 Visual Studio 2008 中创建 COM DLL?

c++ - LoadLibrary 采用 LPCTSTR

c++ - 无法加载符号,即使它存在于 .so 文件中?

java - 服务器端和客户端使用不同的 WAR 并将它们部署在不同的应用程序服务器中的优点和缺点

c# - 隐式与显式接口(interface)实现

面向 Java/*nix 程序员的 C#