Algunos de mis objetos de dominio contienen rangos de fechas como un par de propiedades de inicio y de finalización:¿Debo hacer un objeto DateRange?
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; }
}
y me encuentro con un montón de esto:
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);
El último que me hizo Me pregunto ... ¿Debo implementar una clase DateRange? No conozco ninguno en el BCL.
En mi experiencia, hacer que la jerarquía de objetos sea más profunda a menudo complica las cosas. Estos objetos se envían a informes RDLC mostrados por el control ReportViewer, pero eso es secundario. Doblaré la vista hacia el modelo y no al revés. No estamos atados a los nombres de las propiedades, sin embargo, y estaría dispuesto a comprometer con algo como: validación
public class DateRange {
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
Period p = new Period();
DateTime t = p.EffectiveDateRange.StartDate;
Un beneficio de una clase DateRange estaría centralizada de la fecha de finalización viene después de la fecha de inicio y simplificará mi método firmas:
abstract public int Foo(DateRange dateRange);
abstract public decimal Bar(DateRange dateRange);
abstract public ICollection<DateRange> FooBar(DateRange dateRange);
yo no estoy seguro de que una clase DateRange no me va a entrar en más problemas de lo que vale. Opiniones?
Pregunta adicional: ¿Extraño una clase genérica de tuplas de propósito general en el BCL en alguna parte? Sé que hay algunos muy específicos flotando en varios espacios de nombres. La contaminación de mis firmas de métodos de dominio público con tipos C5 parece muy, muy sucia.
Definitivamente creo que una clase DateRange puede ayudar. Empecé a escribir las bases por un tiempo: http://www.adamjamesnaylor.com/2012/11/04/C-DateRange-Class.aspx –
@AdamNaylor: Tus enlaces parecen estar caídos ... – testing