Certains de mes objets de domaine contiennent des plages de dates comme une paire de propriétés de début et de fin:Dois-je créer un objet 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; }
}
et je me retrouve avec beaucoup de ceci:
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);
Le dernier m'a fait Je me demande ... Dois-je implémenter une classe DateRange? Je n'en connais pas un dans la BCL. Dans mon expérience, compliquer la hiérarchie des objets complique souvent les choses. Ces objets sont envoyés aux rapports RDLC affichés par le contrôle ReportViewer, mais c'est secondaire. Je vais plier la vue au modèle plutôt que vice versa. Nous ne sommes pas liés aux noms de propriétés, bien que, et nous serions prêts à faire des compromis avec quelque chose comme:
public class DateRange {
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
Period p = new Period();
DateTime t = p.EffectiveDateRange.StartDate;
Un avantage d'une classe DateRange serait centralisée validation de la date de fin à venir après la date de début et il simplifiera mes signatures de méthode:
abstract public int Foo(DateRange dateRange);
abstract public decimal Bar(DateRange dateRange);
abstract public ICollection<DateRange> FooBar(DateRange dateRange);
Je ne suis pas sûr qu'une classe DateRange ne me attirer plus d'ennuis que sa valeur. Des avis? Question secondaire: Ai-je manqué quelque part une classe générique de tuple générique dans la BCL? Je sais qu'il y en a de très spécifiques qui flottent dans différents espaces de noms. Polluer mes signatures de méthodes de domaine public avec des types C5 est très, très sale.
Je pense vraiment qu'une classe DateRange peut aider. J'ai commencé à écrire le fond pour un moment en arrière: http://www.adamjamesnaylor.com/2012/11/04/C-DateRange-Class.aspx –
@AdamNaylor: Vos liens semblent être en panne ... – testing