C# 保持接口分离

C# 保持接口分离,c#,design-patterns,C#,Design Patterns,在我的C#应用程序中,我有几个库。例如: 主应用程序EXE 助手DLL,一个 助手DLL,B 帮助程序DLL,C 数据访问DLL,D 我的数据访问DLL D公开了一个接口。Helper DLL B公开了另一个具有基本相同属性的接口,但它不是同一个接口(从名称空间和访问这些属性的方式来看)。此外,助手DLL A使用B和D公开的内容。这导致了我的困惑,因为我需要在A中连接B&D,但我发现自己试图在这些接口之间进行转换,似乎有些不对劲 我对我应该做什么感到困惑: 在整个应用程序中使用D的数据访

在我的C#应用程序中,我有几个库。例如:

  • 主应用程序EXE
    • 助手DLL,一个
    • 助手DLL,B
    • 帮助程序DLL,C
    • 数据访问DLL,D
我的数据访问DLL D公开了一个接口。Helper DLL B公开了另一个具有基本相同属性的接口,但它不是同一个接口(从名称空间和访问这些属性的方式来看)。此外,助手DLL A使用B和D公开的内容。这导致了我的困惑,因为我需要在A中连接B&D,但我发现自己试图在这些接口之间进行转换,似乎有些不对劲

我对我应该做什么感到困惑:

  • 在整个应用程序中使用D的数据访问接口或
  • 让每个DLL具有单独的接口,并在它们从一个DLL交叉到另一个DLL时在它们之间进行转换

  • 有更好的解决方案吗?如果是,为什么?

    有什么问题?你不能在main中创建一个类来实现必要的接口吗


    类可以从多个接口继承,或者您可以定义各种代理,这些代理可以从它们各自的类继承,而这些类可以在某个公共对象上操作。

    如果您需要所有这些接口,很难通过阅读您的帖子来对我说,我会,个人,建议将它们全部放在DataAccess和转换实用程序中。因此,您将把所有内容都放在一个地方,将来编写的任何帮助程序都只需要引用这些内容。

    我将添加另一个DLL,其中包含您希望跨其他三个DLL使用的接口。然后,实现其中一个接口的任何对象都将能够以相同的方式处理,无论它在哪个DLL中声明。
    您还可以在其中一个DLL中扩展这些接口中的任何一个,以在需要时包括额外的属性或方法。

    将这些接口保留在单独的程序集中时,您需要维护/编译什么?若在接口上更改,则必须更新多少程序集?这就引出了一个好的观点:组件的设计有多负责,它们是真的收缩还是仅仅是松散的接线?你的观点很好。更重要的是,它们是负责任地设计和工作的,但我去重构了它们,这次我没有那么负责任。不,对它们来说,在每个需要它们的程序集中指定接口是很好的设计——这是一种通过改进抽象来提供分离的好方法。然而,我确实想知道,OP混淆了一个“接口”,它只指定了接口和该接口的实际实现。也许他根本就没有提到接口,这会很不方便。这取决于你的架构,从博文中还不清楚他将来会怎样。每个程序集维护一个接口可能会在项目周围创建许多不同的接口,并在开发一年后造成混乱。我重复一遍,这取决于项目。我通常为每个/class/维护一个接口。例如,每个程序集可以包含一个ILogger,因此Main.exe只需提供一个从每个ILogger继承的类。这意味着每个程序集不需要依赖于其他程序集。如果你说的是插件,我同意让每个插件与其他插件“分离”是我们想要的。对于其他情况,我并不认为在项目的不同程序集之间创建依赖关系有什么问题。正确的选择取决于架构师。在某些情况下,我必须同意这一点。