【问题标题】:Techniques to remove dependencies?消除依赖的技术?
【发布时间】:2010-09-20 12:04:22
【问题描述】:

场景:

在 A 类中引发了一个 事件,需要由 B 类中的 方法 处理。(目前通过委托)

event 传递到 method 的数据当前包装在 C 类中。
这显然要求 B 类依赖于 C 类。

为了消除这种依赖性,我可以执行任何技术/重构吗?
例如将数据展开回简单的原始数据类型并直接传递它们。

【问题讨论】:

    标签: c# class dependencies


    【解决方案1】:

    您可以序列化为 XML,然后通过 XPATH 直接读取 XML(无需反序列化)

    【讨论】:

      【解决方案2】:

      展开到原语会起作用,但请确定您确实想要删除此依赖项。如果 C 是它们之间的桥梁,或者如果 C 提供它们两者,等等,那么 A 和 B 类都依赖于 C 是完全有效的。

      展开到原语会删除编译依赖项,但不会删除数据依赖项,并且实际上可能通过删除逻辑上需要的实体(C 类)来“反规范化”设计

      【讨论】:

        【解决方案3】:

        我同意 Steven Lowe 的观点;依赖关系可能是有效的。我可以提供的唯一选择是依赖接口而不是实际的类,但它几乎可以归结为同一件事。

        【讨论】:

        • 始终将代码写入接口,取决于接口而不是实际实现,从而提高整体灵活性和可测试性。
        【解决方案4】:

        正如大多数人所说,对 C 的依赖可能是有效的。

        但是,如果依赖 C 给你带来了问题,那可能是因为 C 太复杂或者依赖太多。

        如果在事件中传递了类 C,它可能应该是一个没有自身依赖项的 POCO 类,因此您可能需要考虑对其进行重构。

        如果 C 有自己的复杂方法,那么很可能它们实际上属于 A 类。

        【讨论】:

          【解决方案5】:

          您是否看过像 Structuremap 这样的依赖注入框架,至少可以集中这些依赖并使其可配置?我还没有尝试过事件/委托类型,但如果您在图层周围传递大量自定义类型/接口,它是一个很好的工具。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-22
            • 2015-12-08
            • 2013-12-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多