プリンシプル

プリンシプル DRY原則

Don’t repeat yourself. 重複するな。

プロジェクトを構成するすべての要素(コード、ドキュメントの隅々まで)は、重複すべきでない。

重複を許すと無駄な仕事が増える可能性があり、本質的な作業の時間が奪われる。常に変更箇所を最小限にするために、必要な考え方だ。

重複した時点で、その重複部分の同期が必要になる。このような同期は、できる限り避けるべきである。なぜなら、重複を許せば最後、同期が必要になると多くの無駄な作業が発生する。(重複部分は何箇所あるか。その重複箇所を管理をするための管理用のドキュメントを作るのだろうか、そのドキュメントの場所を管理するためのドキュメントを作るのだろうか。)

変更すべき箇所を、変更するのが目的だ。

同じ処理や、情報が2箇所にあり、片方だけ変更された場合を想像してみたほしい。あとから更に変更が必要になったとき、どうなるだろうか。どちらが正しい情報だろうか。変更すべき箇所は、片方だけ?両方?、どのような変更が適切だろうか。3箇所目はないと言い切れるだろうか。

DRY原則が適用できない場合は、どのようなときだろうか。すべてに適用すべきだ。

ただし、DRY原則を目的にするのは間違いだ。過度な結合を引き起こし、本質的には別のものをまとめるべきではない。また、この原則の教えの背景からも分かる通り、目的が異なるものにも適用すべきではない。例えば、仕組みそのものの本質が同期である場合(プロジェクトのバックアップ)や、結果が常に一定であることが担保され一時的に使用される生成物(ビルド時の一時的な生成物など)や、コミュニケーションを円滑にすすめるためのメッセージの引用(コピーではなく、リンクなどの参照)などがある。