ブログトップ 記事一覧 ログイン 無料ブログ開設

Strategic Choice

2009-02-21

[]DRY原則

The DRY Principle

Don't Repeat Yourself.

情報の重複をなくす。

どういうこと?

変化に強く柔軟なシステムを構築するために重要な考え方。

  • 重複したコードを書かないこと。
  • その考えに基づいて設計すること。
    • 適用範囲はコードだけではない。

たとえば?

「達人プログラマー」では二重化の発生する 4 つのパターンを解説している。

  • やむをえない二重化
    • 開発者に選択の余地が与えられない、環境が二重化を要求するような場合を指す。
    • 言語や環境などの二重化がある。
  • 不慮の二重化
    • 設計の誤りによる二重化。
  • 手抜きによる二重化
    • 二重化されることをわかっていながら、納期が直前だったりという事情でついやってしまう二重化。
    • 定数を直接コードに埋め込んでしまう。
    • 繰り返し使われるコードをインラインで書いてしまう。
  • 開発者間の二重化
    • プロジェクトの開発チーム同士で発生している二重化。
    • 同じ処理をしているのに、チームが違うから別々に同じ機能を開発している。

より具体的に、「プロダクティブ・プログラマ」ではインピーダンスミスマッチ*1によってDRY原則が破られやすいと紹介している。

  • ORマッピング
    • リレーショナルデータベースとオブジェクト指向言語のデータの取り扱いを埋めるため、ORマッパを使用する。
    • すると「データベーススキーマ」「XMLマッピング設定ファイル」「クラスファイル」と3カ所に同じ情報を持つことになる。

どうすれば?

  • 再利用しやすい環境を構築する
    • 既にあるものを何度も作成してしまわないよう、それを簡単に見つけだして再利用できるような環境を構築すること。
    • 簡単に見つけだすことができなければ、他の人たちは見つけだす努力を行わない。
  • 常に DRY を意識する
    • メンテナンスとは「バグの修正と機能拡張であり、アプリケーションがリリースされた時から始まるものである」という考えは間違い。
    • プログラマーは常に「メンテナンス・モード」であり、理解は日々変わっていく。
    • 設計やコーディング中でも新たな要求が発生するため、メンテナンスと開発工程は分けて考えられるものではなく、メンテナンスはすべての開発工程を通じて行う日常業務である。

参考

関連

  • OAOO@Kent Beck in XP
  • One Fact in One Place
    • データベース設計では「正規化」により重複した「情報(データ)」を持たないように設計する、という原則がある。

*1:電話のエコーの原因。信号の同期が完全で無くなっている。ソフトウェアの世界でこれが発生しやすいのは2つの異なる抽象化スタイルの境目。