循环引用是否必要?

Joh*_*ski 6 circular-dependency circular-reference visual-studio

我继承了一个Visual Studio解决方案,它包含了Projects之间的许多循环引用.

是否存在远程可接受的情况?

试图证实我怀疑这个应用程序设计可怕.提前致谢.

Pat*_*ick 8

我曾读过一篇专栏文章,比较了3种模型:Spaghetti模型,Lasagna模型和Ravioli模型.

Spaghetti模型中,所有代码都相互关联,没有明确的结构.这太可怕了,我们大家都同意这一点.

Lasagna模型中,代码分为不同的层,只有更高层的层可以访问更低层,而不是相反.

Ravioli模型中,代码分组为较小的模块.每个模块只暴露需要暴露的内容,但每个模块仍然可以访问每个其他模块.

大约10年前,在我看来,Ravioli模型比Lasagna模型更好.毕竟,在Java中你也有Java模块可以很容易地相互调用(我的印象是所有不同的Java模块之间没有真正的结构).对我来说,Lasagna模型似乎是非面向对象旧代码的结果,而Ravioli模型似乎更现代,更面向对象.

如今,我倾向于回到Lasagna模型,但内置了Ravioli模型.这是:

  • 该应用程序使用不同的层构建,如在Lasagna模型中
  • 但是在这些层中,代码仍然分散在可以相互访问的不同模块之间,就像在Ravioli模型中一样.

某些循环引用可能很难或不可能删除.示例如下:假设您的应用程序中有一个FileWriter类和一个Debug类.Debug类需要FileWriter类,因为它需要编写带有调试信息的文件.另一方面,FileWriter类也可能希望使用Debug类.

请注意,此示例中的循环引用可能已经导致问题(FileWriter类可以在编写行时调用Debug类,但Debug类使用FileWriter类来编写调试信息,结果:堆栈溢出).

在这种情况下,可以通过不在Debug类中使用FileWriter类来轻松解决问题,而是使用本机iostream(如果您在C++中开发).在其他情况下,问题可能更难解决.

  • 很棒,从午餐开始93分钟,我很饿,我读了这个...非常感谢... (4认同)