【发布时间】:2010-09-20 12:04:22
【问题描述】:
场景:
在 A 类中引发了一个 事件,需要由 B 类中的 方法 处理。(目前通过委托)
从 event 传递到 method 的数据当前包装在 C 类中。
这显然要求 B 类依赖于 C 类。
为了消除这种依赖性,我可以执行任何技术/重构吗?
例如将数据展开回简单的原始数据类型并直接传递它们。
【问题讨论】:
标签: c# class dependencies
场景:
在 A 类中引发了一个 事件,需要由 B 类中的 方法 处理。(目前通过委托)
从 event 传递到 method 的数据当前包装在 C 类中。
这显然要求 B 类依赖于 C 类。
为了消除这种依赖性,我可以执行任何技术/重构吗?
例如将数据展开回简单的原始数据类型并直接传递它们。
【问题讨论】:
标签: c# class dependencies
您可以序列化为 XML,然后通过 XPATH 直接读取 XML(无需反序列化)
【讨论】:
展开到原语会起作用,但请确定您确实想要删除此依赖项。如果 C 是它们之间的桥梁,或者如果 C 提供它们两者,等等,那么 A 和 B 类都依赖于 C 是完全有效的。
展开到原语会删除编译依赖项,但不会删除数据依赖项,并且实际上可能通过删除逻辑上需要的实体(C 类)来“反规范化”设计
【讨论】:
我同意 Steven Lowe 的观点;依赖关系可能是有效的。我可以提供的唯一选择是依赖接口而不是实际的类,但它几乎可以归结为同一件事。
【讨论】:
正如大多数人所说,对 C 的依赖可能是有效的。
但是,如果依赖 C 给你带来了问题,那可能是因为 C 太复杂或者依赖太多。
如果在事件中传递了类 C,它可能应该是一个没有自身依赖项的 POCO 类,因此您可能需要考虑对其进行重构。
如果 C 有自己的复杂方法,那么很可能它们实际上属于 A 类。
【讨论】:
您是否看过像 Structuremap 这样的依赖注入框架,至少可以集中这些依赖并使其可配置?我还没有尝试过事件/委托类型,但如果您在图层周围传递大量自定义类型/接口,它是一个很好的工具。
【讨论】: