DRY原則って何
DRY原則とは、ソフトウェアの構成や構築手法について原則の1つで、同じ意味を持つ情報を複数の場所に重複して置くことを避けるべきとする考え方です。
「達人プログラマー」の中で提唱された原則の1つである。
同じ意味とは?
同じ意味に関しては色々解釈があると思います。
ここでは、同じ意味は役割(求められるもの)みたいなニュアンスです。
以下で説明します
同じ意味の例
以下であれば同じ意味になります
Aメソッド…ハンバーグを作るメソッド
Bメソッド…ハンバーグを作るメソッド
同じ意味ではない
以下であれば同じ意味ではありません
Aメソッド…ハンバーグを作るメソッド
Bメソッド…オムバーグを作るメソッド
DRY原則の事例
ここまでソフトウェアの構成や構築手法について原則の1つで、同じ意味を持つ情報を複数の場所に重複して置くことを避けるべきとする考え方がDRY原則として学び、意味は役割的なものと理解しました。
では実際にDRY原則違反かどうかを以下で見てみます
DRY原則違反
メソッドAとメソッドBがメソッドの処理で「勤務労働時間の合計値」が欲しい場合は同じ意味になり、
それぞれに勤務労働時間の合計値を算出するコードを記述する場合はDRY原則違反になります。
(この時は勤務労働時間を計算する共通メソッドを作ってメソッドAとメソッドBに呼び出してもらう必要があります)
DRY原則違反ではない
メソッドAは「勤務労働時間の合計値」メソッドBは「深夜労働時間の合計値」が欲しい場合は、目的が異なるため同じ意味にはならずDRY原則違反にはなりません。
なぜ同じ意味を持つ情報を複数の場所に複数置くことを避けるべき?
少しDRY原則の概要に関しては理解できたと思います。
ではなぜDRY原則を守る必要があるのでしょうか? (同じ意味を持つ情報を複数の場所に複数置くことを避ける)
以下観点で良さを説明できます
1.変更容易性の向上
2.理解容易性の向上
変更容易性が向上するから
変更容易性は以前学んだ通り以下の内容であり、DRY原則を守ることで高めることが出来ます。
変更容易性(maintainability)は、ソフトウェアの開発や保守において、コードを簡単に変更、修正、拡張することができる度合いを指します。
仮に勤務労働時間の合計を計算するメソッドに変更や修正が必要になったとしましょう。
上記のように、DRY違反で各地に勤務労働時間の合計値を出すコードを書いていた場合は
全てに修正を入れる必要があり、変更するのにコストが多くかかりますね。
また修正漏れも出たりして不具合が発生する可能性もあります。
ただDRYを順守していてメソッドを共通化していた場合、
1つのメソッドだけ修正を加えるだけでいいので、変更コストも少なく、修正漏れも出ずらいですね。
理解容易性が向上するから
理解容易性(コード)は以下であり、DRY原則を守ることで高めることができます。
コードが理解しやすいということは、そのコードを読む人がコードの意図、機能、振る舞いを正確に理解できるということを意味します。
仮に、勤務労働時間の合計を計算する内容を利用したいとしましょう。
DRY違反していて散らばって各勤務労働時間の合計を計算するメソッドが書かれているとすると
理解容易性が下がりますよね(「どれが勤務労働時間の合計値を出してくれるメソッドなんだ?どれを使えば良いんだ?」などの疑問が生まれます)
逆にDRYが守られていると、このメソッドが勤務労働時間の合計値を出す内容と分かりやすいです。
こういったことから理解容易性も向上することが出来ます。
まとめ
DRY原則とは、同じ意味のものを重複して置くことを避けるべき考え方です
DRY原則を遵守することで以下を高めます
・変更容易性(修正箇所が少ない&修正漏れリスクの減少)
・理解容易性(利用すべきメソッドが分かりやすい)