投稿数 - 437, コメント - 59540, トラックバック - 156

コードの重複は悪だ!?

class DataAccess
{
 …
 HogeHoge( DateTime.Today.Subtract( new TimeSpan( 1, 1, 1, 1 ) ) );
 …
}

HogeHoge() は日付を指定して、何らかの処理を行う。
上記は日付に昨日を指定して HogeHoge() を使った。

class DataAccess
{
 …
 FugaFuga( DateTime.Today.Subtract( new TimeSpan( 1, 1, 1, 1 ) ) );
 …
}

FugaFuga() も日付を指定して、何らかの処理を行う。
上記は日付に昨日を指定して FugaFuga() を使った。

よくよく考えたら、

DateTime.Today.Subtract( new TimeSpan( 1, 1, 1, 1 ) );

というのは、昨日というのが直感的ではないし、コードの重複だ!

class DataAccess
{
 …
 private DateTime YesterDay
 {
  get
  {
   return DateTime.Today.Subtract( new TimeSpan( 1, 1, 1, 1 ) );
  }
 }
 …
HogeHoge( YeserDay ); FugaFuga( YeserDay ); }

最高だ…。自分に酔いそうだ…。
しかし、「YesterDay」って、このクラスのプロパティか?しかもインスタンスメンバか?

private static DateTime YesterDay()
{
 return DateTime.Today.Subtract( new TimeSpan( 1, 1, 1, 1 ) );
}

まぁ、private だしどっちにしても些細な事だろう。

別のクラスにて…

class Book
{
… FooFoo( DateTime.Today.Subtract( new TimeSpan( 1, 1, 1, 1 ) );
… }

お?これはさっきのメソッドが使えるな。さっきのメソッドは public にしよう。
しかし、DataAccess クラスに YesterDay() というメソッドはおかしい。別のクラスへ移動だ!

class Util
{
 public static DateTime YesterDay()
 {
  return DateTime.Today.Subtract( new TimeSpan( 1, 1, 1, 1 ) );
 }
}

最高だ…。自分に酔いそうだ…。
一緒に開発している田中にも教えてやろう。
「田中。昨日機能を使いたかったら Util クラスを使いなよ」

しばらくして鈴木のコードを見ていると、

class Form1
{
 …
 YouYou( YesterDay() );
 …
 private static DateTime YesterDay()
 {
  return DateTime.Today.Subtract( new TimeSpan( 1, 1, 1, 1 ) );
 }
}

全く同じじゃないか!何故 Util クラスを使わないんだ?
鈴木はこう言った。
「昨日が必要になったとき、昨日機能を提供しているクラスがないかなぁとは思わない。だから探さない」

 

投稿日時 : 2006年1月27日 0:38

フィードバック

# re: コードの重複は悪だ!?

非常に単純な事を行うメソッドを「コードの重複を避けるために共用したい」という理由で公開する。
それは「やり過ぎ」ではなかろうか。
そういうのは private で抑えておくべきだ。
2006/01/27 0:46 | 囚人

# re: コードの重複は悪だ!?

Add.Days(-1) で済むからローカルな作業でも別に分けませんわw
2006/01/27 9:10 | じゃんぬ

# re: コードの重複は悪だ!?

例が悪かったですかな?w
しかし Add.Days(-1) ってカシコっ!思いつかんかった…。
2006/01/27 9:44 | 囚人

# re: コードの重複は悪だ!?

日付関係で作るといったら、GetServerDate メソッドとかかなぁw
2006/01/27 17:40 | じゃんぬ

コメントの投稿

タイトル
名前
URL
コメント