なぜデザインパターンが必要なの


デザインパターンとは

過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものであるーby デザインパターンwiki。要するに、コーディングにおいて定石となる手法をパターン化したものです。

なぜデザインパターンが必要なの

デザインパターンを活用することで、よいコードを書くことができます。(機能の実現だけでわなく、読みやすく保守しやす)

保守しにくいコード例

var makeSound = function( animal ){
  if ( animal instanceof Duck ) {
    console.log( 'ガアガア' );
  } else if ( animal instanceof Chicken ) {
    console.log( 'ピョピョ' );
  }
};

var Duck = function(){};
var Chicken = function(){};

makeSound( new Duck() ); // ガアガア
makeSound( new Chicken() ); // ピョピョ

この例で、鴨と雛の鳴き声を出せるようにしました。
また他の動物を追加する時に(例えばいぬ)、makeSound()はこうなります:

var makeSound = function( animal ){
  if ( animal instanceof Duck ) {
    console.log( 'ガアガア' );
  } else if ( animal instanceof Chicken ) {
    console.log( 'ピョピョ' );
  } else if ( animal instanceof Dog ) { // 追加する部分
    console.log( 'わんわん' );
  }
};

他の動物を追加する時に、makeSound()に修正をかけないといけないことになっちゃいます。既存のコードを修正すればするほど、バグになる確率が高くなります。

保守しやすいコード例

// 不変部分
var makeSound = function( animal ){ 
  animal.sound();
};

// 可変部分
var Duck = function(){}
Duck.prototype.sound = function(){
  console.log( 'ガアガア' );
};

var Chicken = function(){}
Chicken.prototype.sound = function(){
  console.log( 'ピョピョ' );
};
makeSound( new Duck() ); // ガアガア
makeSound( new Chicken() ); // ピョピョ

この例で、どんな動物でも共通的な「鳴き声を出せる」部分を隔離させ、各動物によって別々の鳴き声をそれぞれをカプセル化することで、他の動物を追加しても、既存ソースの編集が要らなくなります。

デザインパターンと保守しやすいコードの関連性

保守しやすいコードの方法論は不変部分を隔離させ、可変部分をカプセル化ということです。
どんなデザインパターンでも、上記の目標を達成するためのベストプラクティスであることです。

まとめ

なぜデザインパターンが必要なのかを簡単にまとめてみましたが、コーディング中にデザインパターンを意識しなくても「不変部分を隔離させ、可変部分をカプセル化」さえを常に意識できれば、より良いコードを書けるかと思います。