新人向けにデザインパターンを教える際に意識しているポイントの一つをここに示します。
設計は状況によって変わるもの
設計の経験を重ねると、同じ機能を実現するためでも複数の設計案が考えられることに気づくと思います。そして、どの設計が「より良い」となるかは、そのときの状況や重視するポイントによって変わります。
そのため、新人にデザインパターンを適用した設計を考えさせる際には、以下の点を伝えるようにしています。
-
目的を意識する
今回の目的が「デザインパターンを理解したか確認すること」である場合、デザインパターンが適用されていることが分かりやすい設計にするのが良い -
設計時の重視点を説明できるようにする
実際の業務では、どのような理由でその設計を選んだのか(例:フィルタ条件が今後増える可能性が高いから拡張性を重視した)を説明できるようにすることが重要 -
重視点によって設計は大きく変わる
設計時に何を重視するかで、最終的な設計は全く異なるものになる。- 重視点が間違っていれば、レビューで指摘される。
- 正しい重視点で設計されていれば、レビューでの改善案もスムーズに出てくる。
デザインパターンの選択による設計の違いを示す
たとえば、同じ「ソート」の機能を設計する場合でも、Factory Methodパターンを適用した場合とBridgeパターンを適用した場合では設計が異なります。以下に具体例を挙げて説明しています。
Factory Methodパターンを適用した場合
以下は、Factory Methodパターンを適用したソート設計のクラス図です。
Bridgeパターンを適用した場合
次は、Bridgeパターンを適用したソート設計のクラス図です。
パターン適用による違いを比較
一見すると両方のクラス図は似ているように見えます。しかし、以下の点で異なります。
- 具象クラス同士の依存関係
- 抽象クラスやインターフェース間の依存の強さ
その結果、FactoryMethodパターンはソートの具象クラスからCompareの具象クラスへの依存があるため、ソートの具象クラスはCompareの具象クラスの変更から影響を受けやすくなります。しかし、ソートの具象クラスを利用するクラスはComparerの具象クラスの変更から影響を受けにくいです。
また、Bridgeパターンの場合はソートの具象クラスとComparerの具象クラス間の依存がないため、お互いに変更の影響を受けにくいです。しかし、ソートの具象クラスを利用するクラスはソートの具象クラスおよびComparerの具象クラスの変更から影響を受けやすくなります。
この違いを説明することで、新人にも「どのデザインパターンを選ぶかによって設計全体がどう変わるか」を理解してもらいやすくしています。
こういったアプローチで、デザインパターンの重要性や選択の背景を具体的に教えています。