代码格式:在类文件中基于调用层次结构布置函数?


10

鲍勃·马丁(Bob Martin)的“干净代码”的建议让我挠头。

到目前为止,我或多或少都遵守.Net指南,该指南按类型(属性,ctor,函数)和可见性(公共/保护/私有)对类成员进行分组。提示一开始似乎很麻烦..但是“可能有用”。我个人遇到过我喜欢这种布局的情况-当您处于正确的呼叫链中时,更容易进行深入研究。

提示背后的想法听起来不错,但其他情况(如“让我看看此类的公共界面”)可能会变得更糟。鲍勃叔叔也许是依靠小类和IDE对查看类型的支持...

有人试过很长时间了吗?

更新:好像是一个代码片段

class SomeType()
{
  /// fields, ctors, et. all
  public void Method1()   { // calls HelperMethod1 and HelperMethod2 }
  private void HelperMethod1 { // calls HelperMethod3 }
  private void HelperMethod3 {}
  private void HelperMethod2 {}

  public void Method2 () { // and so on... }

}

2
可怕的“鲍勃叔叔”并不是盒子里最锐利的铅笔。
尼尔·巴特沃思

1
这个想法只是“在细节之前给我全景”。根据需要进行调整。
Ryan Culpepper

2
老鹰队肯定会再度重聚,因为我发现自己同意尼尔的评论。我与PASCAL一起长大,并“先放点小东西”,因为PASCAL编译器都需要在引用它们之前定义所有内容,并且通常不赞成FORWARD声明。
John R. Strohm

@Neil-我试图判断建议的优点..无论其来源如何。@ John-提示与正向声明相反。.您将调用者放在首位..'被调用者被声明在调用者下方。
Gishu 2011年

@ryanc-该段的序言强调“紧密相关/内聚”的概念应在垂直方向上靠在一起[防止在尝试找出问题时四处滚动]。被调用函数按调用顺序布置在调用者下方。参见添加的代码段
Gishu 2011年

Answers:


2

我可能会在这里忙个不停,但我想知道您使用的工具是否对此有影响。我指的是开发人员必须做出的文本编辑器与IDE决策。

在IDE中,您具有查看源文件的更多功能。通常,您可以获取按可见性甚至按侧栏中的返回类型按字母顺序排序的方法的列表。如果您有使用方法,也可以跳转到该方法。您还可以为方法生成调用树并向下钻取。通常,您还具有强大的find命令,该命令可能支持正则表达式。在这种情况下,您创建的方法的顺序实际上并不重要,因为除了可用的源代码之外,您还有其他视图。

在文本编辑器中,您通常不具备这些功能-最接近的功能可能是强大的查找/替换功能。在这里,您将要更加注意文件的结构,因为它可能更难导航。您希望最小化在文件上滚动查找所需内容所花费的时间,方法的一致和逻辑顺序可以提供帮助。


+1表示IDE;IDE越好,则
不必

1

关键是,调用事物比调用事物有趣。一个方法调用其他方法的次数越多,该方法就越有可能成为对象的外部API的一部分(而不是作为实现细节)。这意味着该类的外部API(如果您的语言支持该方法,则为公共方法)自然会“希望”位于文件的顶部,从而使查找这些方法更加容易。相反,辅助函数等将“希望”位于文件的底部。

(我在解释这个概念,而不是评估它的有效性。)


是的,但是这意味着所有公共功能都应作为一组(即一组)浮动到文件的顶部。常规方法。提议的方法是不同的(或者至少是我的阅读方式)..参见有问题的更新
Gishu

是的,确实,您的公共职能应该浮现在最上面。当然,某些语言根本没有可视性修饰符...
Frank Shearar 2011年

1

如果延长期限意味着超过几天?然后不
。几年前,我开始用一些新代码执行此操作,并逐渐使自己发疯,直到停下来。

个人对布置课程的偏爱是

class MyClass
{
    // static fields
    // fields
    // constructors
    // properties
    // methods
} 

但这不是宗教,属性和方法可以混合在一起。可见性未纳入其中(我不按公开/受保护/私有分组)

我们办公室里的一个人对类文件中的所有内容都保持严格的结构,将所有内容分为主要组和子组,所有这些都很好地嵌套在区域中。。。我必须承认,我认为地区是撒但的工作,它们驱使我绕过苦难的转折。

每次我打开他的一个班级时,我都会在里面一点死:(


我不主张在大班上增加掩盖气味的区域。不是试图让自己信奉宗教..而是在项目中采用一致的布局可以加快工作速度-知道在哪里看。将bu可见性分组是使公共API紧密结合在一起的附加好处,以便您可以找到特定的入口点并从那里进行钻取...
Gishu

和构造函数?那些属于“方法”之下吗?
科迪·格雷

@库迪·格雷:抱歉,忘了老师!
Binary Worrier

@Gishu:我发现现代的可视化和导航工具已不再需要严格的文件布局。右键单击用法和“转到定义”时,在什么地方实现方法有关系吗?
Binary Worrier
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.