ドメイン オブジェクトのいくつかには、開始日と終了日のプロパティのペアとして日付範囲が含まれています。
public class Period {
public DateTime EffectiveDate { get; set; }
public DateTime ThroughDate { get; set; }
}
public class Timeline {
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
そして、私はこれがたくさんあることに気づきました:
abstract public int Foo(DateTime startDate, DateTime endDate);
abstract public decimal Bar(DateTime startDate, DateTime endDate);
abstract public ICollection<C5.Rec<DateTime, DateTime>> FooBar(DateTime startDate, DateTime endDate);
最後に疑問に思ったのは、DateRange クラスを実装する必要があるかどうかということです。私はBCLにあるものを知りません。
私の経験では、オブジェクト階層を深くすると、しばしば事態が複雑になります。これらのオブジェクトは、ReportViewer コントロールによって表示される RDLC レポートに送信されますが、それは二次的なものです。ビューをモデルに曲げますが、その逆ではありません。ただし、プロパティ名に縛られているわけではなく、次のようなもので妥協するつもりです。
public class DateRange {
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
Period p = new Period();
DateTime t = p.EffectiveDateRange.StartDate;
DateRange クラスの利点は、開始日の後に来る終了日を集中的に検証できることです。これにより、メソッド シグネチャが簡素化されます。
abstract public int Foo(DateRange dateRange);
abstract public decimal Bar(DateRange dateRange);
abstract public ICollection<DateRange> FooBar(DateRange dateRange);
DateRange クラスがその価値以上の問題に巻き込まれないかどうかはわかりません。意見?
副次的な質問: BCL のどこかにジェネリック汎用タプル クラスがありませんでしたか? さまざまな名前空間にいくつかの非常に具体的なものが浮かんでいることを私は知っています。パブリック ドメインのメソッド シグネチャを C5 型で汚染することは、非常に汚いと感じます。