我只想知道是否需要说服他使用多个项目!
我对被接受的答案感到非常惊讶。我在两个环境中都工作过,发现多个项目总体上都有益。具体决定仍由您的团队决定(如果一个单一的项目没有阻止您实现目标,则足够了)。
我倾向于使用 Uncle Bob 的OOD 原则来管理软件包。这些原则并不是很出名(特别是与他的用于类设计的 SOLID 原则相比),但它们很合理。
摘自 Uncle Bob 的 OOD 原则
前三个软件包原则是关于软件包内聚性的,它们告诉我们应该把什么放在软件包里:
- REP 发布复用等价原则:重用的颗粒就是发布的颗粒。
- CCP 共同封闭原则:一起变化的类应该封装在一起。
- CRP 共同复用原则:一起使用的类应该封装在一起。
后三个原则是关于软件包间的耦合度,并讨论了评估系统软件包结构的度量标准。
- ADP 无环依赖原则:软件包的依赖关系图必须没有循环依赖。
- SDP 稳定依赖原则:要依赖稳定的方向。
- SAP 稳定抽象原则:抽象程度随稳定性增加而增加。
这些与我的个人经验相符,我倾向于较少的项目通常会导致问题:
较少的软件包可能会导致依赖管理不佳。单独的项目/程序集可以帮助防止在不应该使用的情况下使用内部/私有类和成员。
通常在许多项目中,您会开发一个非常稳定和经过测试的“核心”库集,这些库很少更改。将这些组件保留在自己的项目(甚至解决方案)中可以帮助它们免受高层次的持续变化的影响。
使用较少(或单个)项目导致的大型项目可能非常混乱。Visual Studio不会将您的项目/解决方案镜像到文件结构上,因此即使是有组织的大型项目也可能存在于驱动器上的混沌状态。
Visual Studio足够聪明,可以避免重新编译没有更改的程序集。随着您的“核心”项目稳定下来,它们将看到较少的编译,这可以节省编译时间。
同样适用于上述内容,使用较少的项目会导致总是重新编译代码 - 无论是否存在相关更改。非常大的项目中的一行更改将导致完全重新编译。
当然,多个项目也可能存在问题:
必须注意依赖项,以避免循环引用(.NET处理得相当好,但Visual Studio会防止)
您的解决方案可能变得足够大,以需要子解决方案,这可能很棘手
解决方案的初始编译时间可能较慢
最后,.NET中很少使用的一个功能是单个.DLL可以包含多个模块(实际上是几个程序集共享一个元数据集)。我不建议使用这个功能,但知道它是如何工作的很有趣:http://www.codeproject.com/Articles/9364/Merging-NET-assemblies-using-ILMerge
我认同你的经理的观点。
多个项目意味着多个程序集,需要频繁地复制程序集,编译时间会更慢。
如果你只是为了更好地组织代码而使用多个项目,那么你做错了。使用文件夹也可以达到同样的效果。
一些使用多个程序集的合法理由包括:
由于关注点分离,这将极大地帮助类/对象之间的意外引用。
对于WPF/Silverlight程序员,考虑MVVM设计模式:将ViewModels和Views分开成两个不同的项目将确保没有View对象被引用到ViewModel中。
另一个要点是构建时间可能会更短,因为整个解决方案不会每次重新编译。这可能是您向经理提出的一个好论据(但这个假设可能取决于您的解决方案的大小)。
如果需要,可以使用不同的项目:
为您的解决方案分离二进制文件,这样您就可以灵活地准备和部署补丁/更新
可以管理插件
例如,在您的C#中使用C++代码。
可重用的组件。在程序集中声明的类型可以在公司的不同应用程序中重复使用,以提供统一的API。