DRYとはDon't Repeat Yourselfの略で「繰り返しを避ける」というソフトウェア設計上の原則のことである。Dave ThomasとAndy Huntの『Pragmatic Programmers』で紹介され、Railsが強調したことで知られるこの原則は、ソフトウェアの生産性・保守性の向上に有効な原則として知られている。
一方のOCPとはOpen-Closed Principleの略で「開放・閉鎖原則」とか「オープン・クローズ原則」とか訳される。先日も述べたが、この原則の定義は
モジュールは拡張に対して開いて (Open) おり,修正に対して閉じて (Closed) いなければならない
というものである。 詳しくは、 まさーるさんの記事を参照されたい。
さて、日経Linuxの原稿で今月はOCPについて語ろうとしているわけだが、 えらい苦労しながら、改めて気がついたのは、 この全然違うようにみえるふたつの原則は実は密接な関連があることだ。
すなわち、DRY原則にしたがっていないソフトウェアは自動的にOCPに反することになる。 逆に、DRY原則に従おうとクラス設計すると結果的にOCPに従うことになる(ことが多い)。
で、原稿ではそのことを説明しようとしているのだが、あまり上手に書けてないような気がする。 別にスランプというわけではなくて、いつものことなのだが。