一些my domain对象包含一对开始日期和结束日期属性的日期范围:
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里有一个.
根据我的经验,加深对象层次 struct 往往会使事情复杂化.这些对象确实会被发送到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类型污染我的公共域方法签名感觉非常非常肮脏.