Mic*_*v42 14 c# namespaces solution
首先,让我们同意命名空间应该匹配文件夹结构,并且每个语言工件应该在它自己的文件中.
(请参阅解决方案中的文件夹是否应与命名空间匹配?).
接下来的问题是如何在磁盘上实际组织文件夹.
假设我在ABC命名空间中有ClassC,在ABCD命名空间中有ClassD.
我们还假设每个命名空间都构建在它自己的程序集(项目)中,并且命名空间根据公认的最佳实践从右到左依赖(ABCD可以依赖于ABC,它可以依赖于AB,它可以依赖于A).我感谢每个命名空间不必在一个单独的程序集中,但在一般情况下,我们将在单独的程序集中有一些命名空间,我的例子说明了这一点.
我可以看到(至少)两种创建文件夹树的方法 - 我称之为"嵌套文件夹"和"平面文件夹":
甲
--A.csproj
--B
---- ABcsproj
----Ç
------ ABCcsproj
------ classC.cs
------ d
-------- ABCDcsproj
-------- classD.cs
要么
A
--A.csproj
AB
--ABcsproj
ABC
--ABCcsproj
--classC.cs
ABCD
--ABCDcsproj
--classD.cs
你会看到我已经做了一些假设:
嵌套文件夹似乎更自然(我们都喜欢层次结构),但在大型解决方案中导航可能有点困难:
当您在VS中查看解决方案时,它会显示项目的平面列表,而不是嵌套视图.这看起来更像是"平面文件夹",因此在磁盘上组织文件夹以匹配VS中的视图可能是有好处的.
如果查看磁盘上的每个文件夹,您将看到该项目的文件夹文件加上命名空间的子文件夹:以C为例:
ç
--bin
--D
--obj
--properties
--ABCcsproj
--classC.cs
根据D的真实名称,D可能并不明显是命名空间文件夹而不是C命名空间中的组织文件夹.
我知道我们在.NET(8或9年前)和Java之前的第一天就有文件夹和命名空间,但是,就个人而言,我们似乎没有就大型的最佳实践项目组织达成共识解决方案.我真的很想知道你们都在想什么.
谢谢
迈克尔
我使用平面方法.我发现嵌套的层次结构太难维护了.我将我的项目分组到几个解决方案中,并考虑到最大的可重用性和交叉引用,并始终认为这是令人满意的.示例(项目缩进):
CompanyName
CompanyName.Core
Class1
Struct2
Enum3
CompanyName.Data
CompanyName.Web
CompanyName.Projects
CompanyName.Projects.Core
CompanyName.Projects.ProjectX
CompanyName.Projects.ProjectX.Core
CompanyName.Projects.ProjectX.Website
CompanyName.Projects.ProjectX.ToolY
Run Code Online (Sandbox Code Playgroud)
等等
编辑:删除无意义的评论
我不是嵌套项目的忠实粉丝,因为它将项目深埋在结构中,如果你需要在另一个应用程序中重用该项目,那么你做什么,复制/粘贴代码?我喜欢遵循某种扁平结构,但是按命名空间组织.
我是这样做的:
- DataHelpers\
---Factory\
---DataAccess\
---...
- Components\
--- EmailProcessor\
--- ErrorLogger\
- Desktop\
--- WindowsApp1\
- Services\
--- WindowsService1\
--- WindowsService2\
- WebApps\
--- WebApp1\
--- WebApp2\
Run Code Online (Sandbox Code Playgroud)
现在,在我拥有的每个主要应用程序中,例如:
- WindowsService1\
--- WindowsService1\ (this contains all *.cs, bin, obj, etc and .csproj file)
--- Solution\ (this contains the .sln file where you link to other projects like ErrorLogger, etc)
Run Code Online (Sandbox Code Playgroud)
我希望这是有道理的!
“首先,让 \xe2\x80\x99s 同意命名空间应与文件夹结构匹配,并且每个语言工件 [原文如此] 应位于其自己的文件中。”
\n\n有趣的是,这就是包在 Java 中的工作方式。我一直认为打破命名空间和目录结构之间的链接被认为是 C# 引入的改进之一。这不是真的吗?(请原谅我的无知,我是 Java 人。)
\n| 归档时间: |
|
| 查看次数: |
23722 次 |
| 最近记录: |