ソフトウェア開発メモ

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

オブジェクトへ責務の割り付ける為ために

「オブジェクトデザイン 4.3章 責務を割り合てるための戦略」を読んでまとめてみました。こうして見ると、GRASPの責務割当指針、 レイヤー化の指針(関心事の分離)を擬人化した視点で行うようですね。

CRCカード等に割り当てた責務を記録する

 そうしないと訳が分からなくなるのはもちろんの事、後のコラボレーションの検討に必要になります。  クラスの性格やロール、パターン等を記入します。演劇でいう配役設定になるのかな?

キーオブジェクトにフォーカスしていかに注意して責務を割り当てる。

上記で述べたソフトウェア原則と擬人化の視点化を随時切り替えながら責務を割り当てる。

  • 責務を細かく記述しすぎない。単なる機能の羅列になるので、状態のような物を意識しつつ包含的に書きます。 例えば、ミュージックプレイヤークラスの場合、再生に関する責務だけ書いて、一時停止、停止等は書かない方がいいでしょう。 後、フレームワークが共通のお約束的に責務?は無視した方がいいでしょう。

  • はっきりした責務にする。よくある「〜を管理する」、「〜を制御する」みたいな記述だと、クラスが肥大化(低凝集)し易いです。

  • 配下のオブジェクトについて、責務の分配方法を考える。はっきりとした責務分配をしないと、配下のオブジェクトが単なるデータ保管庫になります。

  • 責務超過になっていないかどうか確認する。使用する属性をみつつ分けた方がいいでしょう。

  • 情報持っているオブジェクトには、その情報そのものを使って何かする責務を割り当てる。(GRASPでいう)情報エキスパートを目指す。

  • 責務分配を合理的に考える。

  • オブジェクト間で重複した情報持たないようにします。2重管理になってややこしくなります。

  • ドメインの責務を割り当てない。レイヤー/パーティションの分離を意識して関心事の分離をしっかり行います。

  • 関係ない責務を持たせない。