拡張ポイントは計画的に
投稿日:2007年05月16日 作成者:yasunaka
最近「ご利用は計画的に」というフレーズがある業界のCMで流行っていますが、今日のテーマは「拡張ポイントは計画的に」です。
システム設計にはできるだけ対象の事象を一般化し、拡張性を考慮した上で設計することにより、様々なケースに対応できるようにする、という一種の美学があると思います。確かに美しいのかもしれませんが、その美しさが役に立たつことのないままシステムが寿命を迎えるということも多いのではないでしょうか。そうなってしまうと、その美学のために費やした時間とお金は無駄になってしまう、ということになります。
このことへの反動からXP(エクストリーム・プログラミング)では、「YAGNI = You Aren’t Going to Need It.」(今必要なことだけ行う)というスタンスで、最初から無駄に拡張性を考えてプログラムを作るな、今必要な機能だけをシンプルに作れ、と説いています。これもこれで一理あるのですが、そうは言ってもはじめから必要性がわかっている部分についてはきちんと拡張性を考えて作らないと、やっぱり大幅に作り直しが必要になって無駄な作業が増えることになりかねません。
むしろ重要なのは、どの部分には拡張性が本当に必要なのかを十分に検討しておくことだと思います。拡張性が明らかに必要な部分だけ、拡張性を考慮した設計にすればよいのです。それ以外のところは「この方が拡張性に富むから」という理由で無駄に複雑なものは作らない。このようなスタンスでシステムを開発するのがもっとも効率が良いと思います。
業務的な観点からどこを拡張できるようにすべきか、その拡張ポイントをきちんと明確にして、クライアントとよく「握って」おきましょう。