我的背景主要是作为Java开发人员,但最近我一直在.NET中做一些工作.所以我一直在尝试在家里做一些简单的项目,以便更好地使用.NET.我已经能够将我的大部分Java经验转移到使用.NET(特别是C#),但唯一让我感到困惑的是名称空间.
我知道命名空间类似于Java包,但从我可以看出的主要区别是,使用Java包它们使用实际文件夹来显示分离,而在.NET中它没有,所有文件都在一个文件夹中并且在每个类中简单地声明命名空间.
我发现这很奇怪,因为我总是将包看作是一种组织和分组相关代码的方式,使其更容易导航和理解.因为在.NET中这种方式不起作用,加班,项目看起来更加过度拥挤而且不易于导航.
我在这里错过了什么吗?我必须这样.我应该在解决方案中将事情分解为单独的项目吗?或者有更好的方法来保持项目中的类和文件组织?
编辑:正如布莱尔指出,这几乎是同样的问题问在这里.
我不能声称这是一种最佳实践,但我经常看到组织在镜像命名空间的目录层次结构中的文件.如果它更适合你的代码的心理模型,那么这样做 - 我想不出任何伤害.仅仅因为.NET模型不强制命名空间,项目和目录结构之间的关系并不意味着你不能拥有这样的关系.
我有点怀疑将代码分解成比你需要的更多的项目,因为这会减慢编译速度并在你必须管理多个程序集时增加一些开销.
编辑:请注意,如果解决方案中的文件夹与命名空间匹配,这个问题几乎是重复的?
是的,在.NET命名空间中不依赖于文件系统或其他任何东西.在我看来,这是一个很大的优势.例如,您可以跨不同的程序集拆分代码,从而实现灵活的分发.
在Visual Studio中工作时,IDE会在向项目树添加新文件夹时引入新的命名空间.
这是来自MSDN的有用链接:
命名空间命名准则
命名命名空间的一般规则是使用公司名称,后跟技术名称,以及可选的功能和设计,如下所示.
CompanyName.TechnologyName [.Feature] [设计]
当然,您可以以更适合的方式使用命名空间.但是,如果您要分享您的代码,我建议您遵循公认的标准.
编辑:
我强烈建议任何.net开发人员获取Framework设计指南的副本本书将帮助您了解.NET的设计方式和原因.