ソフトウェア開発メモ

日々のソフトウェア設計、実装で考えている、気づいた事を書いています。それが真実か否かは保証しません。悪しからず。

コマンドクエリ分離原則〜コマンドの多重呼び出しはコードの把握を困難にする。

メソッドはコマンド系とクエリ系の2つに分かれるのは有名な話。で、最近気づいたけどコマンド系メソッドのネストは保守の時に頭がねじれる。

-(void)command1
{
〜
   instanceVariable = 1;
    [self command2];
〜
}

-(void)command2
{
〜
   instanceVariable = 2;
   [self command3];
〜
}
-(void)command3 
{
〜
   instanceVariable = 3;
〜
}

うまい例がわかないけど、以下の感じでコマンドメソッドの下位メソッドはクエリ系になるだけ置き換えた方が分かりやすいかなと思う。まあ、ケースバイケースだけど。

-(void)command1
{
〜
  instanceVariable =  [self query1];
〜
}

-(int)query1
{
   〜
   return [self query2];
}

-(int)query2; 
{
   int result
 〜
   return result;
}