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

问题描述 投票:6回答:4

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

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

系统

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

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

提前致谢。

c# .net namespaces assemblies
4个回答
4
投票

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

这种方法的缺点是,如果开发人员需要FTP程序集,他们还需要包含Net程序集; 所以你必须找到一种方法来管理那些降低开发人员复杂性的依赖项。 我在使用Java应用程序时使用Maven(来自Apache)但是到目前为止,我还不知道一个类似maven的替代.NET

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


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

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


0
投票

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

第一:

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

第二:

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

第三:

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

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


0
投票

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

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

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

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

这个设置允许我:

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

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

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

  • Company.Utilites
  • Company.Utilites.WPF
  • Company.Utilites.IO
© www.soinside.com 2019 - 2024. All rights reserved.