Quelques-uns de mes objets de domaine contiennent des plages de dates sous la forme d'une paire de propriétés de dates de début et de fin :
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 souvent avec ça :
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);
La dernière m'a fait réfléchir... Devrais-je implémenter une classe DateRange ? Je n'en connais pas dans la BCL.
D'après mon expérience, le fait de rendre la hiérarchie des objets plus profonde 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 l'inverse. Nous ne sommes pas liés aux noms de propriété, cependant, et nous serions prêts à faire un 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 la validation centralisée de la date de fin venant après la date de début, et cela simplifiera mes signatures de méthodes :
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 causera pas plus d'ennuis qu'elle n'en vaut la peine. Votre avis ?
Question secondaire : Ai-je manqué quelque part dans la BCL une classe de tuple générique à usage général ? Je sais qu'il y en a des très spécifiques qui flottent dans divers espaces de noms. Polluer mes signatures de méthodes du domaine public avec des types C5 est très, très sale.
0 votes
Je pense vraiment qu'une classe DateRange peut aider. J'ai commencé à écrire les bases d'une telle classe il y a quelque temps : adamjamesnaylor.com/2012/11/04/C-DateRange-Class.aspx
0 votes
@AdamNaylor : Votre lien semble être en panne ...