我怎么称呼这种编程风格?

时间:2010-07-15 05:50:11

标签: coding-style

我正在使用通过实例变量传递状态的类型。所以你会看到这样的方法:

public MyType MyMethod()
{
  DoThisMethod();
  DoThatMethod();
  AndDoThis();

  return _bleh;
}

这是公认的方法吗?

使用此代码有点令人不安,因为如果您不完全理解代码,实例变量可能会在您不知情的情况下通过其他方法进行转换。如果通过方法参数传递状态,那么您可以对传入的参数的值非常有信心。

5 个答案:

答案 0 :(得分:5)

如果这些方法调用的顺序很重要,我会称之为“错误编程” - 正如您所说的,任何需要较早调用的方法都应该使用指示此方法的方法参数。

我非常确定Code Complete提供了一些很好的例子。

基本上类似于以下内容,其中每个方法都需要先前的调用结果。

public MyType MyMethod() 
{ 
    thisResult = DoThisMethod(); 
    thatResult = DoThatMethod(thisResult); 
    _bleh = AndDoThis(thatResult ); 

    return _bleh; 
} 

其次,我希望尽可能保持方法“正交”(即它们仅依赖于您提供它们的状态)。有关正交代码的精彩摘要,请参阅this article

答案 1 :(得分:4)

广泛地说,功能分解。您描述的模式有时表示代码(a)过于彻底地分解,导致您必须跟踪执行路径以查看最终的组合行为,或(b)执行过多操作的问题。通过转换这些方法来获取参数而不是依赖于内部状态,您可以使它们更易于测试并且可能更具可读性。您可以根据需要在最外层函数中改变状态。

答案 2 :(得分:2)

这与函数式编程相反。我能想到的最接近的是“有状态编程”,但这似乎不够贬义。但它可能有资格成为结构化编程。

顺便说一句,如果您认为HTTP请求类似于方法调用,而“Session”实现就像对象实例一样,那么这正是许多网站设计的方式。而且(恕我直言)它也不是一个好的设计。

答案 3 :(得分:1)

看起来像是对全局错误的误解。我不知道这个特定样式的名称,但是知道它几乎和使用全局变量一样糟糕 - 我想如果函数被调整乱序,事情就会破坏。

答案 4 :(得分:0)

如果那些调用顺序的方法受到限制,也可以识别“顺序耦合”(http://en.wikipedia.org/wiki/Sequential_coupling)。

相关问题