【发布时间】:2016-01-17 15:10:10
【问题描述】:
我经常遇到这样的模式:我有一个主类和几个较小的辅助类或结构。
我希望这些结构的名称尽可能简洁。因此,当我有一个名为CarFinder 的类大量使用某些仅(或主要)在内部使用的特殊 Key 对象时,我想将该对象称为Key 而不是CarFinderKey。
一切都消除了所有额外的模糊,当我在阅读时尝试理解课程时会分散我的注意力。
当然,我不想用一个名为 Key 的小帮助程序类来污染其余代码 - 它很可能会发生冲突和混淆。
在一个完美的世界中,我希望有一个像 internal to this namespace 这样的关键字,但由于它不存在,所以我可以想到以下选项:
- 使用
internal并将该类放在不同的项目中。
优点:完美封装。
缺点:大量的组织开销和不必要的复杂依赖。
注意:我不是在谈论真正值得自己组装的大型独立系统。
- 将其放在不同的子命名空间中,例如
CarFinding.Internal
优点:易于实施。
缺点:意外导入命名空间时仍然会造成污染。
- 将帮助类作为子类放入
CarFinder。
优点 不会对内部造成污染,甚至可以提升为公共辅助结构体,以CarFinder.Key 向外部世界公开
缺点 必须将辅助类放在同一个文件中,或者将其封装在一个外部文件中,并在其周围加上public partial class。第一个使文件变得不必要的长,第二个感觉真的很难看。
- 随便叫
CarFinderKey
优势易于实施。
缺点 在我看来,CarFinder 添加了太多fuzz。仍然不必要地污染命名,只是用一个不太可能发生冲突的名称。
推荐的准则是什么?
【问题讨论】:
-
这个问题的本质对于SO来说太抽象和基于意见。您最好在 SE Programmers (programmers.stackexchange.com) 之类的网站上发布此类问题。
-
我总是使用内部或私有嵌套类(你在 3. 中称之为子类)。 .NET 框架本身大量使用这种模式(甚至在内部用于 C# 语法糖、产量等)。它们还有一个你没有列出的很大优势:它们可以访问包含类的私有成员和受保护成员。
-
能否详细介绍一下“Key”类的字段和操作?如果操作可以抽象为系统中的所有实体使用,则只需实现系统范围的 EntityKey
键类,不会造成污染。
标签: c# scope namespaces naming-conventions naming