组织这个项目的最佳方法是什么?

时间:2011-01-19 15:00:08

标签: c# visual-studio dependencies project organization

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

然而,我对组织这个项目有些不满。我有一些名称空间和一些项目。这些项目编译成不同的DLL。

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

Application
Application.Entities
Application.DataAccess

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

Application.DataAccess.SourceProviders
Application.DataAccess.SourceParser 

所以你可以看到我对此并不十分一致。我不会为每个命名空间创建不同的程序集,因为我觉得它不会增加10 + dll的值。

但我在这里有一些问题,所以我可以决定如何去做。

  1. 为应用程序的不同部分使用不同的程序集有什么好处,而不是只使用1个包含ALL的DLL。
  2. 通过使用不同的项目(cq assembly / dll)从逻辑中分离DAL是一个好主意。
  3. 您是否在VisualStudio或SDK设计中有一些关于项目组织的信息来源。
  4. 干杯,

    蒂莫

3 个答案:

答案 0 :(得分:7)

这很大程度上取决于个人偏好,但我会采取行动:

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

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

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

  
      
  1. 通过使用a来分离逻辑中的DAL是个好主意   不同的项目(cq assembly / dll)。
  2.   

图层可见性应该是这样的:每个图层都可以看到它下面的所有内容,但上面没有任何内容:

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分离为单独的程序集,可以很容易地从不同的项目或解决方案中引用它们。在这种情况下,如果不需要BL,Web服务应用程序(可能是从非.NET客户端或第三方网站调用)可以直接转到DAL,而其他应用程序可以转到BL ,然后通过其他层。

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

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

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

答案 1 :(得分:4)

  1. 使用不同程序集的主要优点是分解大型项目 - 不同的团队或部门可以处理单独的组件。

  2. 是。您的业​​务逻辑应该与您的DAL分开。它对于建筑原因以及Unit& amp;集成测试。

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

答案 2 :(得分:1)

  1. 如果您要在多个项目中重复使用该dll,一定要。如果你想能够更新/补丁而不会在其他库中引起回归,那肯定是。它本质上是一个粒度问题。

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

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

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