2009-06-04 179 views
2

你如何在课堂内将班级成员分组?当你为一个类添加一个新的方法时,你是否将它们添加到它应该按字母顺序排列的位置?内部班级成员分组指导

你使用区域吗?我使用它们与Visual Studio的接口实现的存根生成器创建的组一起,如:

#region IEnumerable 

... 

#endregion 

我使用区域的名称,如“属性”,等等,但一些成员被证明是一个小更棘手组/整理。

你如何处理这个问题?

+0

重复:http://stackoverflow.com/questions/194538/class-member-organization? – 2009-06-04 17:52:50

+0

还没有见过那个。虽然这是专门针对.net的区域等。 – 2009-06-04 18:01:58

回答

2

我亲自按照StyleCop中提出的排序规则进行操作。它对你的方法/属性/事件/等的顺序非常严格。

我不一定相信它有“最好”的规则,但我仍然遵循它,主要是因为它是保证一致性的好工具。我希望我的代码始终保持一致,而不是始终符合我梦寐以求的理想 - 特别是因为我有多个程序员,并且外部工具有助于实施规则解决方案。

5

也许这是过于严格的,但我认为如果你有这么多的班级成员,你担心如何将他们分组以保持可读性,那么你应该把你的班级分成更小的班级和更少的成员。

除此之外,我只是使用常识;相互调用的类似方法或方法被组合在一起,构造函数被组合在一起,属性被组合在一起,公共事物在最前面,人们几乎从不需要看的事物在底部。

+0

我偶尔会使用嵌套区域来组合一组特定的方法(如果它们实现了一个接口)。 – Brandon 2009-06-04 17:48:17

+0

谢谢,但我认为打破类型不是一个好主意。我只包括与课程完全相关的东西。你仍然可以结束说20-30的方法取决于类,比如xna类型。 – 2009-06-04 17:56:04

1

使用区域,按功能划分。这样,随着班级的增长,您可以看到各个区域开始增长,然后这些区域本身就成为这个班级正在实施什么样的责任以及重构的指导方针(即“嘿,我的'过程项目'区域就像5个功能!也许我需要一个班来处理项目!“)。

1

一般:

  • 构造函数(如果有过载)
  • 静态方法
  • 方法
  • 属性
  • 活动
  • 可能分组的接口的实现(即IEnumerable<T>),但绝对用于显式接口实现
  • 嵌套类型

如果ASP.NET:

  • 控件(字段的名字映射到控制)

如果我有了一些重载那么我想补充的方法那些地区。或者,如果有几个类似但不一定重载的方法(例如,List<T>中的Find,FindAll,FindIndex等,则它们将位于“Find”的一个区域中)。

如果我想在课堂上找到某些东西,而不是按名称找到东西,那么问题就是分组。实际上,区域提供有关仅对编辑有用的类成员的元数据。

这是我的组织的一般方法,我的地区也遵循。再说一遍。每个班级都不同(否则为什么要写它?)所以YMWV:那里没有“可能”。

0

因为Visual Studio编辑器在对象选择下拉列表中对它们进行了排序,所以添加新的时候我不重新排序方法或属性。我将来源中的方法,属性和类变量组合在一起。在大班上我使用过地区,但对于大多数班级,我不觉得他们是需要的。

尽管皮特布朗并没有解决地区问题,但他在site提供了一个有用的命名约定列表。