【发布时间】:2010-04-07 22:54:18
【问题描述】:
我们当前的项目遇到了循环依赖问题。我们的业务逻辑程序集使用 SharedLibrary 程序集中的类和静态方法。 SharedLibrary 包含一大堆帮助函数,例如 SQL 读取器类、枚举器、全局变量、错误处理、日志记录和验证。
SharedLibrary 需要访问业务对象,但业务对象需要访问 SharedLibrary。老开发者通过在共享库中复制业务对象的功能来解决这种明显的代码异味(非常抗 DRY)。我已经花了一天时间尝试阅读有关解决此问题的选项,但我遇到了死胡同。
我对重新设计架构的想法持开放态度,但只是作为最后的手段。那么我怎样才能拥有一个可以访问业务对象的共享助手库,而业务对象仍然访问共享助手库呢?
【问题讨论】:
-
显而易见的问题是:为什么共享库需要访问业务对象?如果你能回答这个问题,你就会有一个解决方案。
-
SharedLibrary 有一个包含静态属性的抽象全局变量类。这些属性是从数据库中的值创建的,因此需要业务对象,这只是其中的一个示例。当然,业务对象需要访问这些常量。
-
这就是为什么我从不使用“共享”之类的模糊术语来描述库。它实际上是做什么的?你所谓的共享库显然有太多的责任,也许业务对象库也有。通常,这些解决方案是通过将真正的独立类/接口放入它们自己的库中来解决的。
标签: c# .net design-patterns architecture circular-dependency