代码之家  ›  专栏  ›  技术社区  ›  Mike Q

.NET解决方案-多个项目与一个项目

  •  17
  • Mike Q  · 技术社区  · 15 年前

    我们目前有一个快速增长的C代码库。目前,我们有大约10个项目,分为常规类别、通用/实用工具、网络层、数据库、UI组件/控件等。

    我们偶尔会遇到循环依赖,其中项目x依赖于y中的某个内容,反之亦然。我们正在考虑将项目折叠成一个,然后使用结构文件夹/名称空间进行管理。我们有一个Java项目,它当然只使用文件夹/包组织,所以我们不确定什么,如果有的话,有多个项目带来的好处。我们的项目都不需要特殊的项目属性,除了主运行项目,我们可以将其分开(并且非常薄)。

    有没有人曾经有过为什么一个项目比多个项目更好/更差的经验,并且可以建议最好的方法?而且,任何具有循环依赖性的问题在这两种方法中都是有用的。

    感谢您的任何意见。

    10 回复  |  直到 12 年前
        1
  •  16
  •   Heinzi    15 年前

    根据我的经验,将创建 单一的 可执行的 倍数 如果你想的话,项目是有用的

    • 在不同的部分使用不同的编程语言,
    • 开发其他应用程序也使用的库,或者
    • 概念上分离多个层(即,让Visual Studio确保没有来自项目的直接引用 国际清算银行 项目 应用程序 )

    就我个人而言,我的大多数决定都基于第二点。我认为应用程序的一部分可以是我在其他应用程序中可能需要的更通用的库吗?把它放在一个单独的项目中。否则,正如您所指出的,拥有一个项目通常会使开发更容易。

    关于循环依赖:解决这个问题的建议方法是 界面 第三个项目的参考资料。例如,如果有两个应用程序都通过远程处理共享某些对象,则将共享对象的接口放在库项目中,以确保它们对两个应用程序都可用。

    如果不知道应用程序的确切设计,就很难给出更具体的建议。

        2
  •  23
  •   Jon Seigel    15 年前

    如果有具有循环依赖性的项目,则表示代码的设计有问题,而不是解决方案/项目模型有问题。

        3
  •  15
  •   Neil N HLGEM    15 年前

    在项目之间建立依赖关系时,总是将一个项目视为“低”而另一个项目视为“高”会有所帮助。

    更高级别的项目(如Web界面)应该只依赖于较低级别的项目。较低的项目(如实用程序)不应依赖于较高的项目,如Web界面。如果发生这种情况,它要么意味着更高级别的项目具有真正应该位于较低级别的项目中的内容,要么反之亦然。

        4
  •  8
  •   Juri    15 年前

    一般来说,在这些情况下,拥有多个vs项目(在vs解决方案中)是有意义的。

    • 您可以在其他项目(类库)中重用生成的dll。
    • 您希望将诸如分层体系结构中的内容分离开来,这样您就可以删除DAO DLL并与另一个DLL交换它。
    • 只有不同的前端项目(即ASP.NET MVC应用程序)需要部署在不同的物理位置,但使用相同的BL、DAL。

    如果你说你有循环依赖的问题,那么你的代码设计就有问题了。也许您可以将多个项目使用的逻辑放在设计为在许多项目中重用的类库中。

    一般来说,如果你真的不需要的话,你不应该增加更多的项目。拆分成项目意味着增加更多的复杂性,所以当您这样做时,您应该从中获得合理的收益。

        5
  •  7
  •   Rob Walker    15 年前

    我们注意到,随着项目数量的增加,Visual Studio的性能会显著降低。对于包含大约12个C_项目的解决方案,从“调试”配置切换到“发布”配置这样简单的操作可能需要15秒以上的时间。

    另外,作为Reed关于构建时间的评论的反驳点,我看到了构建时间的增长,因为Visual Studio似乎在项目开销上花费了大量时间。实际编译时间似乎很快,但从启动build到能够运行的总时间是很长的。

    我的建议是尽量减少项目的数量。如果您出于好的原因需要多个项目,那么在必要时使用它们,但更喜欢将它们放在一起。如果需要,您还可以重构将一个项目拆分为两个。

        6
  •  2
  •   pkaeding    15 年前

    将一个解决方案分为不同的项目(以及组件)有几个原因,主要归结为 再利用 Y和 职责分离 .

    现在,您的目标应该是使一个程序集(又称项目)在您的解决方案中具有对其他程序集的最小依赖性,否则您也可以将所有内容都放在较少的程序集中。例如,如果您的UI组件对数据访问代码有很强的依赖性,那么 可能 出了点问题。

    真的,这可以归结为 根据公共接口编程。

    然而注意:

    当我说“否则你也可以把所有的东西都放在更少的集合中”,我并不一定认为这是错误的做法。为了实现真正的关注点分离,您需要编写更多的代码,并且需要更多地考虑您的设计。所有这些额外的工作可能对你不太有利,所以仔细考虑一下。

        7
  •  1
  •   Stacy Vicknair    15 年前

    您可能会发现以下马丁的文章值得一读: Design Principles and Design Patterns (PDF)(Java) .

    C中的修订版可在 C语言中的敏捷原则、模式和实践# 还有马丁。

    两者都表达了不同的指导方针,这将帮助您决定什么属于哪里。然而,正如所指出的,循环依赖性表明设计中存在问题,或者某个组件中的某个内容属于另一个组件。

        8
  •  0
  •   Reed Copsey    15 年前

    多个项目允许在多个应用程序中更好地重用特定类型。它还可以提高构建时间,因为对于所有代码更改,某些项目不需要重新构建。

    一个项目可以让生活更轻松,因为你不必担心依赖性。只需意识到,这种轻松是有代价的——它也使糟糕的设计决策更容易潜入代码库。循环依赖性,无论是在一个项目中还是在多个项目中,通常都是设计缺陷,而不是需求。

        9
  •  0
  •   Shad    15 年前

    在我工作的地方,我们选择了一种方法,其目标是每个解决方案都有一个单独的项目。所有代码库项目还具有测试工具应用程序和/或单元测试应用程序。

    只要代码库通过测试,发布版本(当然有XML文档文件)就会被转移到一个__live_文件夹中。

    任何需要这些其他项目功能的项目都必须从__Live_文件夹中引用它们。

    优势很明显。任何项目总是访问已知的工作代码。从来没有机会引用正在进行的工作程序集。代码根据程序集进行测试,这样更容易理解错误的来源。较小的解决方案更易于管理。

    希望这有帮助!

    鲱鱼

        10
  •  -1
  •   lubos hasko    15 年前

    从单个项目开始。将代码库拆分为更多项目的唯一好处是只需改进构建时间。

    当我有一些可重用的功能,我真的想从主项目中分离出来时,我将为它启动一个全新的解决方案。