Tbpgr Blog

元エンジニア 人事 tbpgr(てぃーびー) のブログ

実装パターン | 振る舞い

概要

振る舞いについて
(この書籍のベースはJavaの話)

詳細

制御フロー

順接、分岐、繰り返し等の制御フローによりプログラムは構成される。
フローをグループ化したりすることで理解を促進したりする。

メインフロー

メインフローを明確にしたプログラムを作ることで可読性が上がる。
ガード条件や例外を利用する。

メッセージ

詳細について隠蔽したまま処理の概要を伝えることが出来る。
複合メソッド等を利用して処理の粒度を統一することで理解を深める。

選択メッセージ

case文などの代わりに多態を利用する。
条件分岐が無いコードになるため可読性が上がる。

二重ディスパッチ

複数の選択メッセージを多態で利用すること。
依存度が高まり柔軟性が下がるため乱用すべきではない。

分割メッセージ

複雑な処理をステップごとに役割を表す分かりやすい命名で分割することで可読性を上げる。

反転メッセージ
void hoge() {
  hoge;
  helper.hige(this);
  hage;
}

この例だと対称性を欠いているので以下のようにする

void hoge() {
  hoge;
  hige(helper);
  hage;
}

void hige(Helper helper) {
  helper.hige(this);
}
招待メッセージ

Template Methodと命名など、によりサブクラスでの実装を促し招待する
メッセージを送る。

説明メッセージ

意図を表す命名を行う。
文字列を反転するメソッドがreverseとして提供されていた場合に、
強調表示として利用する場合はメソッド名をhighlightという命名で包むことで目的を明確にする。

例外フロー

メインフローの流れを維持し、フローを明確にするため例外的な処理には例外フローを利用する。

ガード条件

メインフローにするために、異常系の処理などはガード条件を利用する。
メソッドをreturnしたり、ループをcontinueで抜けたりすることで以降の処理をわかりやすくする。

例外

問題発覚時に例外をスローし、処理できる箇所でまとめてキャッチする。

チェック例外

投げた例外に対して何も処理されないことを防ぐためにチェック例外で補足を共用する。
しかし、プログラムのコストがかさむため乱用すべきではない。

例外の伝搬

下位レベルの例外は上位の例外に包んでおき、ログなどに役立てる。
画面等に表示するのは上位の利用者に役立つ内容を表示する。