【问题标题】:Common definitions in loose coupled design松耦合设计中的常见定义
【发布时间】:2011-07-12 15:12:59
【问题描述】:

我正在尝试组合一个非常精细的松散耦合设计。

但我无法决定如何处理常见定义。

现在我通过将其添加为外部 dll 来分离关注点。通过注入和接口,我的域可以在不知道实现的情况下使用我的业务逻辑。

我遇到的问题是,要让我的所有组件松散耦合,它们需要实现相同的接口。我的解决方案是一个单独的项目(dll),只有所有的定义。 这开始很好,但似乎变得臃肿并将所有代码链接到这个 dll 依赖项上。

最务实的做法是什么?

谢谢!

【问题讨论】:

    标签: c# oop architecture loose-coupling


    【解决方案1】:

    编辑

    抱歉,我想我最初误解了您的问题。因此,您有一个包含您的接口的程序集,并且您在其他程序集中使用 DI 创建您的依赖对象。我倾向于在我的应用程序中创建一个核心程序集,它包含应用程序的主要行为(智能实体、枚举和接口)。这个程序集几乎不依赖于应用程序的其余部分,但对它的依赖很大。以这个项目为例 - whocanhelpme.codeplex.com。你可以称这个核心为臃肿,但根据定义,它需要非常丰富。


    您可能会发现您的许多抽象单元都遵循常见的设计模式。这是一个很好地描述每一个的网站 - 您可能能够从中派生名称(观察者、工厂、适配器等):

    http://www.dofactory.com/Patterns/Patterns.aspx

    【讨论】:

    • 我使用的是最接近工厂方法的。但是通过松散耦合我的层(GUI、业务、服务、数据),他们都需要了解可以传递具体对象的共享定义(接口、枚举等)。因此,他们都需要了解使用具体实例的接口,这会产生对定义的交集和依赖。如果我尝试将它们提取到一个单独的 dll 中,并且我会进入我的 UserManagement 逻辑,我还将加载我的 DAO 对象 fe 的定义。 (就像要打开一扇门时需要建筑物的蓝图一样)
    • 对不起,我想我最初误解了你的问题。因此,您有一个包含您的接口的程序集,并且您在其他程序集中使用 DI 创建您的依赖对象。我倾向于在我的应用程序中创建一个核心程序集,它包含应用程序的主要行为(智能实体、枚举和接口)。这个程序集几乎不依赖于应用程序的其余部分,但对它的依赖很大。以这个项目为例 - whocanhelpme.codeplex.com。您可以称这个核心为臃肿,但根据定义,它需要非常丰富。
    • 谢谢!我正在检查它并试图了解您的架构。我将阅读更多内容并尝试重新安排我的项目以结合“核心”功能,而不是尝试使我的接口/枚举“可导出”。
    【解决方案2】:

    我想说,该层应该只知道下一层及其接口,因此可以将接口与其实现一起放置,然后在链中的层(程序集)之间添加引用。

    您可以使用引导程序模式配置 DI 并通过定位器进行解析。关于诸如日志记录、缓存等横切问题,应该有单独的程序集引用到每一层。在这里,您还可以使用合同,并且将来可能会用另一个实施相同合同的程序集来替换这些横切功能。

    希望这至少有一点帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      相关资源
      最近更新 更多