ストラテジパターンのリスク

JavaプログラマGoldの試験範囲にデザインパターンの理解がある。ではデザインとはどのようなパターンか。JavaプログラマGold教科書にはこうある。

「パターンはある文脈の問題に対して繰り返し適用可能な解決策と定義されています。文脈とは取り巻く環境、状況、相互に関係し合う複数の条件を示します。問題とは調査と解決を要する何らかの事態を指します。解決策とはある文脈における問題を解くために役立つ答えを指します。つまりパターンとは多くの人の経験や情報をもとに作られた様々なケースに適用可能な解決策です。ソフトウェアの分野ではパターンをデザインパターンとも呼びます。」

デザインとは設計のことだ。つまりデザインパターンオブジェクト指向設計のパターン集である。

教科書には更に注意事項としてこうある。「デザインパターンを適用することで全ての問題が解決するわけではありません。メリットもあればデメリットもあります。各デザインパターンの特性を理解し状況に応じて適用するかどうかの判断が必要となります。」

御意。教科書は試験を受ける人に向けて書かれているためこのような記述に留まっているが、現場の人間からすれば「まさにその通り」と云いたいほどである。デザインパターンにはメリットもあるがデメリットもある。銀の弾丸は存在しない。

開発の現場でもよくデザインパターンが適用される。適用により変更性は向上するからだ。そして可読性も向上する。デザインパターンは全てシンプルで分かりやすい。まさに設計の手本集だ。

だが誤った使い方をすれば逆の結果となる。変更を向上させるどころか変更不可能なシステムが出来上がる。誤用すれば簡単な機能追加に想定の何倍もの期日を要することになる。

オラクル認定資格教科書 Javaプログラマ Gold SE 7 (EXAMPRESS)

オラクル認定資格教科書 Javaプログラマ Gold SE 7 (EXAMPRESS)

 

 デザインパターンのひとつ、ストラテジパターンも素晴らしい設計技法であることであることは間違いない。ストラテジパターンとは、身体に当たるクラスをひとつにし、顔に当たるクラスを幾つか用意する設計技法だ。ひとつの身体で顔だけが幾つにも変わる。まるでルパン三世だ。

では何故そんなやり方をするのか。それは機能の追加、変更、削除に優れた技法だからだ。なにしろ顔だけ取り替えれば良いのである。最小限の労力で機能の変更、追加、削除が可能となる。何よりこのパターンが人気のある理由は構造がエレガントなのである。エレガントで然も変更に強い。これは設計にとって非常にエキサイティングである。

だが盲点もある。それはどんなに変装名人のルパンでも限界があるということだ。人間の顔ならいざ知らず、いくらルパンでも動物は無理である。犬、猫、鳥には変装できない。

システム開発でも同じリスクがある。部分を取り替えればどんな機能でも作成できるという前提が崩れるということだ。そういうケースが出てくればストラテジパターンは使えない。そのうち、ストラテジパターンを使わない方が機能を変更・追加し易いということになってしまう。ストラテジパターンを使った機能は果たして残骸となってしまう。

システムへの要求は常に流動的である。見極めが難しい。ストラテジパターンは前提条件が崩れた時に変更困難となることが多々ある。だがストラテジパターンは設計者が大好きなパターンであり、不必要と思われるケースでもあえて適用してくるケースも少なくない。

レビューアはそこをチェックする必要がある。設計は遊びではないのだ。