シーケンスダイアグラムを実装するときなど、設定された順序で実行する必要のある操作の一覧があることがあります。シーケンスの変更によって微妙なバグを導入するリファクタリングを防ぐために、コード実行順序を強制する最良の方法は何ですか?コード実行シーケンスを適用する
foo()とbar()の実行順序を次のように変更したことで、既存の単体テストで問題が発生しないとしましょう。私が見て使ってきた方法の
数:
コメント(それらを理解&を読んだ人に依存しています):
// do this
foo();
// then this
bar();流暢文法(コードを英語のように読むようにして、無慈悲なリファクタリングを避ける):
obj
.Do
.foo()
.Then
.bar();状態変数& balking(あまりにも精巧):関数に論理ブロックをグループ化
foo_done=false;
if(foo()) foo_done=true;
if(foo_done) bar(); else throw_an_exception;:
void foo_bar()
{
foo();
bar();
}
...と説明するにはあまりにも醜い、より多くの(関数ポインタの入れ子、イベント、配列を、命名関数は(開始)、中東()とEnd()...) 。
このようなことを行うための改良されたパターンはありますか?
もっと具体的な例が、より良い回答を引き出すかもしれないと思います。物事を成就させる必要のある順番はどれほど厳格ですか?正確なシーケンスでいくつかのメソッドを常に呼び出す必要がある場合、正しい順序ですべてのメソッドを呼び出すvoid doEverything()に何が問題なのかのエラーです。アドホック・オーダーでオペレーションを呼び出す必要がある場合、そこにはどんな制約がありますか?なぜ彼らは特定の順序で呼び出される必要がありますか?彼らはいくつかの共通の状態で動作しますか?ユニットテストではない副作用がありますか? –