【问题标题】:What's the best way to organize this project? [closed]组织这个项目的最佳方式是什么? [关闭]
【发布时间】:2011-06-11 19:50:48
【问题描述】:

我目前正在尝试找出组织我目前正在进行的项目的最佳方式。它将成为人们可以使用的 SDK。

但是,我在组织这个项目方面有点吃力。我有一些命名空间和一些项目。这些项目编译成不同的 DLL。

当我编译所有程序集时,我有以下程序集:

Application
Application.Entities
Application.DataAccess

但是,在这些程序集中仍然有一些不同的命名空间,比如

Application.DataAccess.SourceProviders
Application.DataAccess.SourceParser 

如您所见,我并不太同意这一点。我不会为每个命名空间创建不同的程序集,因为我觉得拥有 10 多个 dll 并没有增加任何价值。

但是我在这里有几个问题,所以我可以决定如何去做。

  1. 对应用程序的不同部分使用不同的程序集而不是仅使用 1 个包含 ALL 的 DLL 有哪些优势。
  2. 使用不同的项目(cq 程序集/dll)将 DAL 与逻辑分开是个好主意吗?
  3. 您是否有一些关于 VisualStudio 或 SDK 设计中项目组织的信息来源。

干杯,

提莫

【问题讨论】:

    标签: c# visual-studio dependencies project organization


    【解决方案1】:
    1. 使用不同组件的主要优势在于分解大型项目 - 不同的团队或部门可以处理不同的组件。

    2. 是的。您的业​​务逻辑应该与您的 DAL 分开。它对于架构原因以及单元和集成测试很有用。

    3. 这是非常主观的,取决于您的项目规模、团队、组织结构、业务需求等。

    【讨论】:

    • 我不明白如何将项目分解为程序集,以便不同的团队或部门可以在单独的组件上工作。如果您进行适当的源代码和构建控制,则将其放入一个程序集中仍然是可能的。
    • @2.我也将我的单元测试与解决方案分开了,我明白你为什么希望它分开,因为我不想用我的 dll 部署测试。但是,仍然不清楚为什么您希望 DAL 在不同的程序集中。
    • 只能在一定程度上实现。在 5 个不同国家的 20 个团队中拥有 100 名开发人员在一个项目上工作变得难以管理。想想项目和 DLL 的大小——一个 DLL 中会包含数千个类。
    【解决方案2】:
    1. 如果您打算在多个项目中重用该 dll,那肯定是。如果您希望能够在不引起其他库回归的可能性的情况下进行更新/修补,那肯定是。这本质上是一个粒度问题。

    2. 我通常这样做,主要是为了单元测试粒度,以及 #1 中的原因。

    3. 我发现this 有一些见解,但我并不完全同意。与所有 TFS 一样,我认为它通常太多了。

    我认为命名空间本质上是一种文档形式 - 通过指明命名空间,您设定了该命名空间的所有成员都有共同点的期望。

    【讨论】:

      【解决方案3】:

      这很大程度上取决于个人喜好,但我会试一试:

      1. 为不同的应用使用不同的程序集有什么好处? 应用程序的一部分,而不是 仅使用 1 个包含 ALL 的 DLL。

      如果您需要单独维护 DLL,或者如果您需要分发不同版本的代码,那么将它们保持隔离是有意义的。如果您能够动态加载程序集并希望能够从不同的发行版中排除某些 DLL(例如,根据用户的许可添加或删除功能),这提供了一种方便的方法来做到这一点,而无需依赖编译标志或不同的构建配置 - 只需删除您不希望用户拥有的 DLL。

      降低单个库的代码大小可能会对 JIT 产生影响,但我对此并不乐观。也许其他人可以插话。

      1. 将 DAL 与逻辑分开是个好主意吗? 不同的项目(cq 程序集/dll)。

      层的可见性应该是这样的:每一层都可以看到它下面的所有东西,但上面什么都看不到:

      UI
      Controller layer (populates the UI, interacts with the logic/business objects)
      Business objects
      DAL
      Database.
      

      一般来说,每一层都应该只与它正下方的那一层对话,并且只能被它正上方的那一层调用。

      现在,假设您有一组这样的应用程序:

      [asp.net web site]    [Winforms client]    [windows service]   [web service]
              |                    |                     |                |
      web business objects    desktop logic        service logic          |
              |                                                           |
               \-------------------|--------------------/                 |
                                   |                                      |
                    generic business objects (BL)                        /
                                   |                                    /
                                  DAL ----------------------------------
                                   |
                                  SQL
      

      通过将通用对象和 DAL 分离到单独的程序集中,可以轻松地从不同的项目或解决方案中引用它们。在这种情况下,Web 服务应用程序(可能打算从非.NET 客户端或第 3 方网站调用)如果不需要 BL,则可以直接访问 DAL,而其他应用程序可以访问 BL ,然后通过其他层。

      能够在不同类型的应用程序之间共享代码,全部用 .NET 语言编写,这是 .NET 独有的非常非常强大的功能。特定于 Web 的代码可以存储在其自己的库集合中,特定于桌面的代码等也可以。将每一层分成一个或多个程序集可以让您将新项目修补到有意义的管道中,并确保您不这样做在分发客户端应用程序时,不必包括 system.web,这样应用程序才能编译。

      1. 您是否有一些关于项目的信息来源 VisualStudio 或 SDK 中的组织 设计。

      在我的老板在会议期间不再盯着我打字后,我会尝试找到一些链接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-25
        • 1970-01-01
        • 2017-08-30
        • 2010-10-09
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        相关资源
        最近更新 更多