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