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

正确的C#命名空间用法是什么?,c#,namespaces,C#,Namespaces,我来自Java背景,我看到很多人说namespace=packages,但环顾现有代码,我觉得人们使用名称空间的方式与使用包的方式不同 目前,我正在开发一个DLL来管理我对数据库的所有数据访问,以便在两个Windows应用程序之间共享。到目前为止,我一直在像为Java创建包一样创建包,因此我在顶层有一个域、服务、DAO(我称之为存储库)子名称空间。这是正确的吗?有人写过名称空间的最佳实践吗?我想这可能是一个很小的问题,但我不想说得有悖常理。看看这一点一个常见用法是CompanyName.Syst

我来自Java背景,我看到很多人说namespace=packages,但环顾现有代码,我觉得人们使用名称空间的方式与使用包的方式不同


目前,我正在开发一个DLL来管理我对数据库的所有数据访问,以便在两个Windows应用程序之间共享。到目前为止,我一直在像为Java创建包一样创建包,因此我在顶层有一个域、服务、DAO(我称之为存储库)子名称空间。这是正确的吗?有人写过名称空间的最佳实践吗?我想这可能是一个很小的问题,但我不想说得有悖常理。

看看这一点

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

稍微主观一点,没有“确定的、正确的”答案

我是这样做的,目的是程序集可以在项目之间共享

假设我有一个公司名叫FooBar(+1代表创意人?:)

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

例如:

  • MVC(UI)HTML帮助程序。这些在一个集合中
  • 通用存储库。使用泛型实现的存储库模式,以供重用
  • LINQ扩展方法(分页、通用语法糖厂)。同样,这些都在一个组件中
因此,我们的FooBar命名空间宇宙可能如下所示:

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)
知道我的意思吗

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

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


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

最好的指导原则可能是MSDN上的

它基本上说你应该使用:

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

我现在已经在做这个了。所以我有Company.Product.Module,但我的问题是,在这之后该做什么。本文主要介绍名称空间是什么,以及如何使用它们。我要寻找的是在上面的上下文中应该如何使用名称空间。这篇文章也是针对VB.Net贪婪的。做你觉得合适的事。但是,在调整和更改语言时,不要害怕重构名称空间。虽然通常的做法是将各个层分离成程序集,但最好将各个层紧密地连接在一起,以减少连接。Eric Evans在域驱动器设计()中介绍了这一点(一般来说,主要是Java)。我认为同样的教训也适用于.NET。@jwadsack-这是一把双刃剑。有些东西应该绑在一起。其他的不是。例如,存储库/DAL。应该去耦合。我是依赖注入的忠实粉丝,这就是为什么我喜欢尽可能多地抽象。
FooCompany.BarProduct.Baz