每个命名空间分支的理想数量的类

时间:2008-09-28 17:35:12

标签: c# namespaces grouping

您认为每个命名空间“分支”的理想数量是多少?人们会决定将一个名称空间分成多个名称空间?我们不讨论类的逻辑分组(假设它们在逻辑上正确分组),此时我将重点放在可维护类和不可维护类的数量上。

7 个答案:

答案 0 :(得分:27)

“42?不,它不起作用......”

好的,让我们的编程能力发挥作用,看看微软的意见是什么:

# IronPython
import System
exported_types = [
  (t.Namespace, t.Name)
  for t in System.Int32().GetType().Assembly.GetExportedTypes()]

import itertools
get_ns = lambda (ns, typename): ns
sorted_exported_types = sorted(exported_types, key=get_ns)
counts_per_ns = dict(
  (ns, len(list(typenames)))
  for ns, typenames
  in itertools.groupby(sorted_exported_types, get_ns))
counts = sorted(counts_per_ns.values())

print 'Min:', counts[0]
print 'Max:', counts[-1]
print 'Avg:', sum(counts) / len(counts)
print 'Med:',
if len(counts) % 2:
  print counts[len(counts) / 2]
else: # ignoring len == 1 case
  print (counts[len(counts) / 2 - 1] + counts[len(counts) / 2]) / 2

这为我们提供了每个命名空间的类型数量的以下统计信息:

C:\tools\nspop>ipy nspop.py
Min: 1
Max: 173
Avg: 27
Med: 15

答案 1 :(得分:8)

使用现代IDE和其他开发工具,我会说如果所有类都属于命名空间,那么为了可维护性,没有任意数字可以分解命名空间。

答案 2 :(得分:3)

我认为命名空间应该尽可能大。如果存在创建兄弟命名空间或子命名空间的逻辑原因,则执行此操作。我认为拆分为命名空间的主要原因是为了简化开发,使开发人员更容易导航命名空间层次结构以找到他们需要的东西。

如果您有一个包含大量类型的命名空间,并且您觉得很难找到某些类型,那么请考虑将它们移动到另一个命名空间。如果类型专用于父命名空间类型,我将使用子命名空间;如果可以在没有原始命名空间类型的情况下使用类型或具有不同的目的,则使用兄弟命名空间。当然,这一切都取决于你正在创造什么和目标受众。

如果命名空间少于20种类型,则不太可能值得拆分。但是,您应该在设计期间考虑名称空间分配,以便在开发时预先了解,哪些类型在哪些名称空间中。如果在开发期间进行命名空间分配,那么在确定应该在哪里进行时,需要进行大量的重构。

答案 3 :(得分:1)

这里没有涉及的一件事,虽然它与克里斯的观点有关,但是命名空间的可学习性不仅仅与物品的数量有关。

(顺便说一句,这在最广泛的意义上适用于“命名空间” - 类本身在一般意义上是命名空间,因为它包含某些名称,这些名称在该上下文中的含义与在另一种上下文中的含义不同,枚举是在这个意义上也是一个命名空间。)

假设我遇到了一个带有 Element 类的XML相关命名空间。我对此有所了解,当我查看 Attribute 类时,我看到了一些相似之处。当我看到 ProcessingInstruction 类时,我可以合理地猜测它是如何工作的(如果我认为完全错误,它可能是一个设计缺陷,最好的差异不仅仅需要记录,而是解释)。在我看到它之前,我可以猜到有一个 Comment 类。我将继续寻找您的 TextNode 类,并想知道这些是否继承自 Node ,而不是必须从文档中了解它们。我会怀疑你使用 Lang 类采用了哪几种合理的方法,而不是想知道它是否在那里。

因为这一切都与我已经知道的领域有关,所以这7个类的概念“成本”远远低于7个被调用的类, Sheep 电视 FallOfSaigon Enuii AmandaPalmersSoloWork ForArtsSakeQuotient DueProcess

这与Chirs的观点有关,因为他说我们被建议为了可用性来保持选择的数量。但是,如果我们按字母顺序选择国家/地区,我们会立即查看整个列表并立即选择我们需要的列表,因此保留选项的建议不适用(实际上,一次只能选择一些选项)不太有用且可能具有侮辱性。)

如果你的命名空间有200个名字,但是你只需要真的学习了6个就能理解这个地段,那么与拥有十几个与之相关的十几个名字相比,它会更容易理解。彼此。

答案 4 :(得分:0)

我知道您不想讨论逻辑分组,但是要进行拆分,您需要能够对两个不同的命名空间进行分组。我开始考虑在大约30个类的新命名空间;但我不认为这是一个主要问题。

答案 5 :(得分:0)

我必须说我发现以上所有非常令人惊讶的阅读。

可用性专家告诉我们将菜单中的选项数量保持在有限的数量,以便我们立即看到所有选择。这同样适用于您组织工作的方式。

我通常期望命名空间中有4-10种类型。节省了大量的东西狩猎和上下滚动。使用resharper移动东西是如此快速和容易,我认为没有任何理由不这样做。

答案 6 :(得分:0)

应该提到的另一件事是,将包含扩展方法的类放在自己的命名空间中通常是值得的,这样您就可以使用using指令启用或禁用这些扩展方法。因此,如果命名空间中的东西是包含扩展方法的静态类,则答案是1。