【发布时间】:2009-07-08 13:42:26
【问题描述】:
有时您只有一个需要按固定顺序执行的操作列表,例如在实现序列图时。强制执行代码执行顺序以防止重构通过更改顺序引入细微错误的最佳方法是什么?
让我们假设现有的单元测试不会捕获任何由于更改以下 foo() 和 bar() 的执行顺序而导致的问题。
我见过和使用过的一些方法:
-
评论(依赖于阅读和理解它们的人):
// do this
foo();
// then this
bar(); -
流利的语法(让代码读起来更像英文,不鼓励随意重构):
obj
.Do
.foo()
.Then
.bar(); -
状态变量和犹豫(太复杂了):
foo_done=false;
if(foo()) foo_done=true;
if(foo_done) bar(); else throw_an_exception; -
将逻辑块分组为函数:
void foo_bar()
{
foo();
bar();
}
...还有很多难以描述的东西(嵌套、事件、函数指针数组、命名函数 Begin()、Middle() 和 End()...)。
有没有更好的设计模式来做这种事情?
【问题讨论】:
-
我认为一个更具体的例子可能会得到更好的答案。需要完成的事情的顺序有多严格?如果您总是需要以确切的顺序调用某些方法,而不这样做是错误的,那么以正确的顺序调用所有方法的 void doEverything() 有什么问题。如果您确实需要按特定顺序调用操作,有哪些限制?为什么需要按特定顺序调用它们?他们在一些共同的状态下运作吗?它们有副作用吗?你不是单元测试吗?
标签: coding-style design-patterns