ソフトウェアは、ユーザーだけでなく開発者にも役立つようにしなければならない。何度も書き直し拡張しながら何年も使い続けることになる。
複雑なふるまいをするソフトが良い設計をしていないと、リファクタリングしたり組み合わせたりするのが難しくなり重複が生まれてしまう。ソフトウェアがきれいな設計をしていないと、既存のごちゃごちゃした状態を恐れるだけでなく、予期しない影響が起きるのを恐れて変更をしたくなくなってしまう。
開発が進むにつれプロジェクトが加速していくようにするには、変更を促進し嬉しくなるような設計にする必要がある。それが柔軟な設計(Supple Design)である。
柔軟な設計は深甚(しんじん)なモデルを補足するものである。反復な開発をしてリファクタリングを繰り返すことでモデルをより深く把握していく。この章では、どんな設計にすべきか、その過程でどんな実験をすべきかについて述べる。
過度のエンジニアリングは正当化されがちだが、大抵足かせになる。本当に人の役に立っているソフトウェアの設計を見るとシンプルであることがわかる。シンプルにするのは簡単ではない。複雑なシステムを理解可能にするには、高度な設計技術を要するMODEL-DRIVEN DESIGNに専念する必要がある。
開発者は、ドメインオブジェクトをアプリケーションコードや他のドメイン領域のコードに織り込む「クライアント開発者」という役割をも担う。クライアント開発者は、ドメインの様々なシナリオを表現するために、大まかに組み合わさった概念の小さなセットを柔軟に使う。
設計は、変更に取り組む開発者にとっても役立つようにし、変更の結果が予測できるよう理解しやすくしなければならない。設計の変更は深甚なモデルに沿うよう柔軟性のあるポイントで行う。
設計の初期段階はガチガチに固いが、最も重要で複雑な部分を研ぎ澄ますことで、レガシーメンテナンスにハマることと複雑の壁を突き抜けることの違いを生み出す。
ソフトウェア設計に常套手段はないが、筆者の経験上設計を柔軟にするのに役立つパターンセットを選んだ。これらは柔軟な設計がどのようなものなのかを感じ、深く考えさせるようになるだろう。