创建可重用企业名称空间时的最佳实践

时间:2011-09-25 16:11:48

标签: c# .net namespaces assemblies

好吧,现在已经有一段时间了。我正在为所有常见的中间层对象创建可重用的公司命名空间(类库)。然后,我们的任何开发人员都可以在项目的开发阶段引用此程序集。这是我的问题。创建一个由我们所有中间层逻辑组成的单个程序集还是将此功能分解为更小的程序集更容易接受?

示例:单个程序集(命名空间示例)

系统

System.IO

System.IO.RegEx

System.Net

System.Net.Mail

System.Security

System.Web - AssemblyFull.dll

示例:多个程序集

System.IO

System.IO.Reg - 编译为AssemblyIO.dll

System.Net

System.Net - 编译成AssemblyNet.dll

过去我使用这两种方法做到了这一点,但我想知道其他人做了什么,为什么?我不是在寻找任何代码示例,我只是想知道其他开发人员在做什么?

提前致谢。

4 个答案:

答案 0 :(得分:4)

作为一般规则,如果组件未明确耦合,我会使用它来分隔组件。例如,如果您有一个低级别的网络API,以及其他用于FTP相关操作的API,那么后者可能取决于前者;但对于API用户,您的开发人员;没有必要在一个组件中同时存在;也许一个项目不需要FTP API,所以他们只需要包含核心“Net”程序集。您可以将API分开,以便尽可能地使用原子,并避免开发人员在只使用其中的一小部分时包含大型程序集。

这种方法的缺点是,如果开发人员需要FTP程序集,他们还需要包含Net程序集;所以你必须找到一种方法来管理那些降低开发人员复杂性的依赖项。我在使用Java应用程序时使用Maven (from Apache)但是到了这个日期我还不太了解maven-like alternative for .NET

但是,如果您正在为您的公司构建一些API,使用Wiki网站或其他轻量级文档工具,您可以解决此问题。

答案 1 :(得分:1)

我不认为他们是对此的正确答案,但我倾向于对我们所有的库使用通用的命名方法。

我有一个处理大量中间层功能的库,有点像大多数应用程序会使用的常见任务。

Web.CreditCard
Web.CreditCard.Authorization
Web.CreditCard.Charge
Web.CreditCard.Batch

Web.Store.Order
Web.Store.Entities
Web.Store.Cart
Web.Store.Auth

Web.User.Auth.OpenID
Web.User.Auth.OAuth
Web.User.Account
Web.User.Preferences

因此,您可以重复使用哪种类型的项目并快速识别它们并不重要。其中一些具有自己的接口,可以继承和重载,以根据项目要求添加更多功能。

答案 2 :(得分:0)

感谢所有回复此问题的人。由于每个项目都不同,几乎不可能得出正确的答案,我将描述我将如何处理这个问题。

<强>首先

我需要确定将在所有项目中使用哪些业务/中间层对象。一旦确定了这些,我将创建一个程序集 [company] .common [company] .common.util 。这些将参考我们当前和即将开展的每个项目。

<强>第二

识别更具体项目的对象。可以引用或不引用这些程序集。一个例子是 [company] .security.cryptography

<强>第三

确保每个对象都有良好的文档记录,以便将来的开发人员具备正确维护和引用正确程序集所需的知识。

我想感谢大家这么快回复我。这是我关于SO的第一篇文章,但我可以向你保证,你很快就会再次见到我。再次感谢。

答案 3 :(得分:0)

我对可重用文件使用了不同的方法。

我创建了一个单独的解决方案,其中包括所有可重用的组件,测试等。

每个可重复使用的“东西”(类,函数,UserControl,图标等)都在一个单独的文件中。

需要来自可重用部分的某些功能的项目只是直接链接到源文件。 (“添加现有项目”,“添加为链接”)。为方便起见,我将所有重用的部分放在VS的“utilities”文件夹中(因为文件是链接的,所以实际的实用程序文件夹是空的)

此设置允许我:

  • 只需添加我需要的常用功能
  • 没有额外的依赖
  • 实用程序中的错误修复会自动包含在下一个版本中

唯一的缺点是,如果您手动需要添加任何依赖项,则会添加所添加的功能(例如,另一个可重用的组件或程序集)

由于我不使用不同的程序集,因此命名空间只遵循以下函数:

  • Company.Utilites
  • Company.Utilites.WPF
  • Company.Utilites.IO