Несколько моих объектов домена содержат диапазоны дат как пару свойств начала и конца даты:
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.
По моему опыту, глубина иерархии объектов часто усложняет ситуацию. Эти объекты отправляются в отчеты RDLC, отображаемые элементом управления ReportViewer, но это вторичное. Я склоню взгляд к модели, а не наоборот. Однако мы не привязаны к именам свойств и будем соглашаться на компромисс с чем-то вроде:
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 очень и очень грязно.