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

Tim*_*sen 6 c# dependencies project organization visual-studio

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

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

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

Application
Application.Entities
Application.DataAccess
Run Code Online (Sandbox Code Playgroud)

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

Application.DataAccess.SourceProviders
Application.DataAccess.SourceParser 
Run Code Online (Sandbox Code Playgroud)

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

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

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

干杯,

蒂莫

3Da*_*ave 7

这很大程度上取决于个人偏好,但我会拍摄一下:

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

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

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

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

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

UI
Controller layer (populates the UI, interacts with the logic/business objects)
Business objects
DAL
Database.
Run Code Online (Sandbox Code Playgroud)

通常,每个层应该只与它下面的那个层对话,并且只应该由它正上方的那个层进行调用.

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

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

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

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

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

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