什么是正确的C#命名空间用法?

时间:2010-10-14 00:53:42

标签: c# namespaces

我来自Java背景,我看到很多人都说命名空间=包,但是看看可用的代码,我觉得人们不会像使用包那样使用命名空间。

目前我正在开发一个DLL来管理我对两个Windows应用程序之间共享的数据库的所有数据访问。到目前为止,我一直在创建像Java一样的软件包,所以我有一个Domain,Services,DAO(我把它称为Repositories)子命名空间从我的顶层开始。它是否正确?是否有人为命名空间编写了最佳实践?我认为这可能是一个非常小的问题,但是我不想反对这种说法。

4 个答案:

答案 0 :(得分:11)

略显主观,没有“明确,正确”的答案。

以下是我的工作方式,目的是在项目之间共享程序集。

考虑一下我有一个名为 FooBar 的公司名称(原创性为+1?)

所有程序集都从此根命名空间开始。我们有很多共享集合。

类似的事情:

  • MVC(UI)HTML帮助程序。这些都集成在一起。
  • 通用存储库。使用泛型实现的存储库模式,以便重复使用。
  • LINQ扩展方法(分页,通用语法糖厂)。同样,这些都是一个集会。

因此,我们的 FooBar命名空间Universe 可能如下所示:

FooBar
|
 ---- FooBar.Common.Mvc
|
 ---- FooBar.Common.DataAccess
|
 ---- FooBar.Common.Linq
|
 ---- FooBar.ProjectOne (ASP.NET MVC Web Application)
|     |
|      --- FooBar.ProjectOne.Repository (makes use of FooBar.Common.DataAccess)
|     |
|      --- FooBar.ProjectOne.WebMvc (makes use of FooBar.Common.Mvc)
|
 ---- FooBar.ProjectTwo (WPF Application)
      |
       --- FooBar.ProjectTwo.Repository (makes use of FooBar.Common.DataAccess)
      |
       --- FooBar.ProjectTwo.BindingServices (makes use of FooBar.Common.Linq)

知道我的意思吗?

以基于异构命名空间将公共逻辑放入公共区域的“感觉正确”的方式设置命名空间。

你会发现许多拥有多个共享项目的公司都遵循这一趋势。

您对“子命名空间”的看法是正确的(在我看来)。

答案 1 :(得分:4)

最佳指南可能是MSDN上Namespace Naming Guidelines内的Design Guidelines for Developing Class Libraries

它基本上说你应该使用:

<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]

将翻译为:

FooCompany.BarProduct.Baz

答案 2 :(得分:0)

答案 3 :(得分:0)

一种常见用法是CompanyName.System.Module,例如LogicStudio.ERP.GeneralLedger

相关问题