为什么Visual Studio中的循环引用是一种不好的做法?

pia*_*an0 30 c# visual-studio

为什么Visual Studio中的循环引用是一种不好的做法?

首先,我将描述一个如何在Visual Studio中使用C#实现这一点的示例,因为VS通常会通知您是否有循环引用并阻止它.

首先,仅依靠Visual Studio和.Net为您提供的代码创建Utilities类.然后,创建一个依赖于Utilities 的电子邮件类.不是将两个项目都添加到单个解决方案中,而是创建新的解决方案并添加对Utilities.dll的引用.然后,一段时间后,有人决定他们希望Utilities类发送电子邮件并添加对Email.dll的引用.Visual Studio非常乐意让您这样做,但是现在源代码不会在没有二进制文件的情况下按原样编译.

在我的工作地点,在进行开发时复制并粘贴二进制文件是标准的过程,然后只构建您正在处理的项目.这导致代码库中至少有一个循环引用已经被忽视超过3年.

这对我来说似乎是一个非常糟糕的做法,因为没有先从DLL开始构建任何项目.这个论点与我合作的"实际"人群有点平淡,因为我们似乎不太可能同时丢失所有二进制文件的副本.二进制文件在任何时候都不存储在版本控制中,这只会让我更担心.

这似乎是应该避免的情况,但不是造成任何明显威胁的情况.项目之间的循环引用真的很重要,还是我把它吹得不成比例?

Pet*_*Jr. 40

是的,这是一个不好的做法,正是你所说的原因 - 你无法从源头重建.

  • 我想补充说,避免这类问题的一个好方法是自动持续集成. (3认同)

ben*_*ith 23

这是过度模块化的症状之一.

我曾在一家公司工作过一次,在SVN存储库中有大约20个开发人员和60多个不同的活动项目.每个项目都有自己的构建脚本,并生成一个JAR文件,该文件是至少六个左右的其他项目的依赖项.管理所有这些依赖项是如此复杂,以至于我们浪费了大量时间尝试(不成功,我可能会添加)来设置maven项目以自动获取所有这些小型微项目的所有正确的库(以及正确的版本).

有趣的是(对我而言)它实际上只是一个项目,它甚至不是我们分发给外界的东西.它是一个托管应用程序,具有Web前端,在单个服务器群集上运行.

啧.

该体系结构的另一个副作用是,在几个不同的项目中,相同类型的功能一次又一次地重复(并不总是使用相同的算法或结果).我认为部分原因是因为人们不想为整个子项目引入新的依赖项,只是为了访问它的一些类.但我认为另一个原因是人们只是不知道代码存在于哪里,而不是找到他们想要重用的代码的麻烦,他们只是在他们自己的项目中重写它.

当然,模块化通常是一件好事.

但就像所有好事一样,它可以被视为荒谬的极端.

我的建议是找到那些循环依赖项并将项目合并到更大的块中,因为当前的项目细分可能代表了错误的模块化.最好将您的大项目划分为几个分离良好的模块,而不是拥有数以万计的伪模块在逻辑耦合类之间创建人为边界.


Cor*_*rch 13

除了构建问题,循环引用总是表明设计缺陷.在.NET中,循环关系使两个程序集有效地成为一个程序集.如果没有一个人可以独立生活,那么单独构建它们只是一个练习 - 它并没有改变它们共同代表整体装配的事实.

我已经注意到了很多实用程序集.必须是反模式.