DRYってどんな意味 ?

DRY 原則とは

DRYとは 「Don’t repeat yourself」 の略で 同じコードを何度も書かない という意味です。

コードで知る

以下は重複があるJavaコードです

public void hoge(Integer skillId) {
  Skill skill = SkillDao.selectOne(skillId);
  if (skill.getType() == ATTACK) {
    :
    :
}

public void fuga(Integer skillId) {
  Skill skill = SkillDao.selectOne(skillId);

  int effect = skill.getEffectValue();
}

上記サンプルコード中の Skill.selectOne()は 「スキルテーブルを PK 指定で 1件 SELECT する」関数です。
この関数は ID に一致するデータが登録されていない場合、Null が返却されます。


このコードはとても悪い見本です。
運用フェーズで新しいデータを追加、検証するという段階でしばしば NullPointerException が発生して、テストが止まります。

さらに、 どこでエラーが出ているかを確認し、例外の原因となった未登録の ID を調査しなくてはならない ため、とてもコストが高かったのです。


上記のコードで Null チェックを追加し、エラーメッセージを適切に出力することでコストを下げましょう。

public void hoge(Integer skillId) {
  Skill skill = SkillDao.selectOne(skillId);
  if (skill == null) {
     logger("skill id not found");
     throw new Exception("");
  }
  if (skill.getType() == ATTACK) {
    :
    :
}

public void fuga(Integer skillId) {
  Skill skill = SkillDao.selectOne(skillId);
  if (skill == null) {
     logger("skill id not found");
     throw new Exception("");
  }

  int effect = skill.getEffectValue();
}

この方法は明らかにダメです。
同じコードが重複しています。

SkillDao.selectOne の返り値が null かどうかのチェックを呼び出し先で毎回行っています。
SkillDao.selectOne を使うところが増えれば増えるほど、同じように null チェックをたさなければなりません。


この場合は「呼び出し先ではなくて、呼び出し元で null チェックする」とコードの重複を排除できますね。

こういった 暗黙のルール は簡単に増えてしまいます。
できるだけシンプルに、覚えることが少なく、かつ美しいコードを書きたいですね !

暑い夏はビールで乾杯 !

スポンサーリンク







シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク




コメントの入力は終了しました。