我的一些域对象包含日期范围作为一对开始和结束日期属性:
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 类型污染我的公共领域方法签名感觉非常非常肮脏。