.net Visual Studio解决方案:这些解决方案是否有太多的项目?

.net Visual Studio解决方案:这些解决方案是否有太多的项目?,.net,visual-studio,projects-and-solutions,.net,Visual Studio,Projects And Solutions,在我目前工作的公司,我们支持4个有点相关的windows应用程序。对于每个应用程序,我们都有一个解决方案,每个方案的范围从50到100个项目。可能有40或50个项目在一个或多个解决方案之间共享 让您了解一下,更大的解决方案有近90个项目,其中20个是UI项目(主应用程序、自定义控件项目、UI助手项目),另外20个是业务层项目,可能有30或40个数据访问层项目,其余是Windows服务项目和专用项目 我一直觉得每个解决方案中都有太多的项目。当然,我们谈论的是大型应用程序,但我不明白为什么许多项目无

在我目前工作的公司,我们支持4个有点相关的windows应用程序。对于每个应用程序,我们都有一个解决方案,每个方案的范围从50到100个项目。可能有40或50个项目在一个或多个解决方案之间共享

让您了解一下,更大的解决方案有近90个项目,其中20个是UI项目(主应用程序、自定义控件项目、UI助手项目),另外20个是业务层项目,可能有30或40个数据访问层项目,其余是Windows服务项目和专用项目

我一直觉得每个解决方案中都有太多的项目。当然,我们谈论的是大型应用程序,但我不明白为什么许多项目无法整合。在我以前的公司,我们实际上有一个单一的项目用于业务层,一个单一的项目用于DAL,显然每个windows或web应用程序都有一个项目

以下是我因大量项目而遇到的一些问题:

  • 编译时间长
  • 通常应该是私有的类需要是公共的,以便同一层中的其他项目可以访问
  • 我最近开始使用分析器Eqateq。试用版允许分析多达10个DLL。我的情况显然使使用此应用程序变得复杂
  • 跟踪项目之间的引用是相当复杂的。我确信项目之间有很多未使用的引用
相比之下,我没有发现这种情况的优势

因此,我的问题是:

  • 您什么时候决定创建一个新项目而不是在当前项目中创建一个文件夹
  • 有什么我忽略的优势吗
更新: 请记住,我并不是建议每件事都有一个单一的项目。至少应该有一个DAL项目、一个BL项目和一个UI应用项目。我意识到,即使对于大多数应用程序来说,这也是不现实的。 我想了解的是,定义组件“单一责任”级别的最佳实践是什么?我的意思是,这是一个非常主观的问题,如果走到极端,会导致每个类有一个集合

更新2: 所有三个答案都提供了有价值的信息,但由于我只能选择其中一个,所以我选择Doc作为他关于如何确定DAL项目数量的评论。 我还链接到我刚刚发现的其他有相关信息的问题:和。
我也推荐阅读。

有很多项目并不一定是坏事

它的一大优势是有模块来创建一个具有层的体系结构。也就是说,Gui类可以引用较低的层,但不能引用相反的层

如果您有一个引用上层(gui)的下层(例如业务逻辑),您将有一个循环依赖关系,visual studio将拒绝构建您的解决方案

如果将所有项目混合到单个项目中,则不会发生这种情况。当然,如果在代码上运行,您可以发现这一点,但我认为让编译器来帮助您更安全

关于你关于让类私有化的观点,让我更多地思考你的API。这些项目不应该合并在一起吗?这些类不应该合并吗 被提取到第三个项目中。当我思考这些问题时,我试着分层思考,没有银弹

对于只属于项目的类,我通常会在这些必须声明为公共的“内部”类的名称空间中添加一个“内部”(或“详细信息”)字。例如:您将知道,MyApplication.Model.Publisher中的任何类都不应访问MyApplication.Model.Vendors.Internal中的任何类。这是我在EclipseAPI中看到的一种技术

我知道C#有一个内部关键字,但有时人们会不假思索地将其公开。将其命名是一种更强的方法,因为公开该类需要更多的工作


使用真正大型软件的其他方法正在采用插件方式,因此它将使您的构建时间大大缩短。它总是有代价的。您可以检查一下。

我们主要讨论的是.NET项目,对吗?将应用程序拆分为不同的项目/程序集会迫使您避免这些项目之间的循环依赖关系,因为C#和VB.NET编译器确实禁止这样做。如果你把一个所有的东西都放在一个大项目中,那么每个类都可以引用该项目中的其他所有类,这使得你可以创建一个真正的依赖梦魇。如果您打算在一个团队中使用单元测试和开发,那么如果团队成员可以在不同的、独立的DLL上工作并分别测试它们,那么就更容易了

你问题的“跟踪引用”部分是:如果你把所有的东西都放在一个大的DLL中,你的类之间有相同的引用,就像你有单独的DLL一样,但是你不能再控制它们了。“私有”类也是如此(我想你是指“内部”类吧?)

当然,我不能告诉你的是,如果你的90个项目都是精心挑选的工作单元。这是一个“单一责任”的问题,正确的抽象级别和由此产生的依赖关系,只有了解您的应用程序系统的人才能回答


编辑:到目前为止,我已经阅读了一些文章(),它们通过名称空间定义组件边界,并将多个组件放入一个物理程序集/一个VS项目中,从而缩短了编译时间。为了使这种方法可行,可能需要像NDepend或类似的工具来确保组件之间没有循环依赖关系。对于大型项目,这可能是更好的选择。

如果给定解决方案中的项目数量导致