Ein paar meiner Domain-Objekte enthalten Datumsbereiche als ein Paar von Start- und Enddatum Eigenschaften:Soll ich ein DateRange-Objekt erstellen?
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; }
}
Und ich finde mich mit viel dies:
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);
Die letzte mir gemacht frage mich ... Sollte ich eine DateRange-Klasse implementieren? Ich kenne keinen in der BCL.
Nach meiner Erfahrung kompliziert die Objekthierarchie oft die Dinge. Diese Objekte werden an RDLC-Berichte gesendet, die vom ReportViewer-Steuerelement angezeigt werden, aber das ist zweitrangig. Ich werde den Blick auf das Modell richten und nicht umgekehrt. Wir sind nicht auf die Eigenschaftsnamen gebunden, aber, und mit etwas zu Kompromissen bereit wären, wie:
public class DateRange {
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
Period p = new Period();
DateTime t = p.EffectiveDateRange.StartDate;
Ein Vorteil einer Klasse Daterange zentralisiert Validierung des Enddatum nach dem Startdatum kommen würde, und
abstract public int Foo(DateRange dateRange);
abstract public decimal Bar(DateRange dateRange);
abstract public ICollection<DateRange> FooBar(DateRange dateRange);
ich bin nur nicht sicher, dass eine Daterange-Klasse bekommt mich nicht in mehr Mühe als sein wert: es wird meine Methode Signaturen vereinfachen. Meinungen?
Side question: Habe ich irgendwo im BCL eine generische Tuple-Klasse für allgemeine Zwecke übersehen? Ich weiß, dass einige sehr spezifische in verschiedenen Namensräumen herumlaufen. Die Verschmutzung meiner Public-Domain-Methodensignaturen mit C5-Typen fühlt sich sehr, sehr dreckig an.
Ich denke auf jeden Fall, dass eine DateRange-Klasse helfen kann. Ich begann eine den Grundstein zu schreiben eine Weile zurück: http://www.adamjamesnaylor.com/2012/11/04/C-DateRange-Class.aspx –
@AdamNaylor: Ihre Links unten zu sein scheint ... – testing