オブジェクト指向設計の原則 - パッケージ設計の原則
少し勉強したんで、メモ。
たぶん、今後更新していきます。
まず、パッケージとは、機能のグループ単位、サブシステムのこと。
Javaだと、パッケージの概念はあるけど、もっと広い意味でJarもパッケージに含まれる。
パッケージ内部の凝集度に関する原則
再利用・リリース等価の原則(REP:Reuse-Release Equivalency Principle)
再利用の単位とリリースの単位は等価になる。
パッケージに含まれるクラスは、すべてが再利用されるか、すべてが再利用できないかのどちらかにすべきだ。
リリースの単位はパッケージ毎に行う。
再利用できるパッケージは別に切り出しといて、再利用できないパッケージでそれを使うイメージ。
全再利用の原則(CRP:Common Reuse Principle)
パッケージに含まれるクラスは、すべて一緒に再利用される。
つまり、パッケージに含まれるいずれかのクラスを再利用するということは、その他のクラスのすべてを再利用するすることを意味する。
同じパッケージに含めるクラスは、一緒に使われる傾向にある。
逆に言えば、互いに強い関連性を持たないクラスを同じパッケージにまとめるべきではない。
閉鎖性共通の原則(CCP:Common Closure Principle)
パッケージに含まれるクラスは、みな同じ種類の変更に対して閉じているべきである。
パッケージに影響する変更はパッケージ内のすべてのクラスに影響を及ぼすが、他のパッケージには影響しない。
単一責任の原則のパッケージ版。パッケージの変更理由は一つであるべきだ。
パッケージ同士の結合度に関する原則
非循環依存関係の原則(ADP:Acyclic Dependencies Principle)
パッケージ依存グラフに循環を持ち込んではならない。
パッケージ間はインターフェースのみに依存すべきである。
安定依存の原則(SDP:Stable Dependencies Principle)
安定する方向に依存せよ。
安定度の高い(変更しにくい)パッケージに依存するべき。
当然、不安定なパッケージに依存するとそのパッケージに変更があったときに
影響を受けてしまう。
安定度・抽象度等価の原則(SAP:Stable Absstractions Principle)
パッケージの抽象度と安定度は同程度でなければならない。
安定度の高い(変更しにくい、依存されている)パッケージは抽象度が高くなければならない。
不安定な(変更することを意識して作られた、依存ばかりしている)パッケージは具体的でなければならない。
まとめ
あまり、クラス設計の原則と変わらない印象。
クラスは全く他のクラスに依存しないのは不可能なので、
パッケージ単位で扱う(リリース、再利用)必要がある。
その中で、いかに、オープン・クローズド(拡張に対して開いていて、
修正に対して閉じている)にするかが大切ということだろう。
アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技
- 作者: ロバート・C・マーチン,瀬谷啓介
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2008/07/01
- メディア: 大型本
- 購入: 10人 クリック: 331回
- この商品を含むブログ (61件) を見る