Muster zum Erstellen von wiederkehrenden Ereignissen

8

Ab und zu stehe ich vor einem Feature, das besser wäre, wenn ich etwas wiederkehrende Fähigkeit darin lege.

Um es klar zu machen, lassen Sie mich ein bekanntes Beispiel verwenden. Wenn ich in Google Kalender ein Ereignis als wiederkehrend festlegen, sagen wir jeden Montag, wird es jeden Montag angezeigt. Ich kann die Wochen weiterrollen und es wird das Ereignis zeigen.

Ich glaube nicht wirklich, dass sie das Event in der Datenbank für jeden Montag bis zur Ewigkeit erstellen :-), noch schaffen sie es bis zu einem weit entfernten Jahr.

Ich würde gerne wissen, ob es ein bekanntes Muster dafür gibt oder einen Leitfaden mit Best Practices.

Danke.

    
Ricardo Acras 24.01.2011, 14:38
quelle

2 Antworten

16

Soweit es mich betrifft, hat Martin Fowler das definitive Wort zu zur Beschreibung von Wiederholungen aus einer Datenmodellierung Standpunkt. Sobald Sie Wiederholungen erfasst haben, müssen Sie lediglich Code bereitstellen, um Ereignisse für ein bestimmtes Datum (Uhrzeit) abzurufen.

    
Pontus Gagge 24.01.2011, 14:56
quelle
1

Dieses Problem ist für eine Weile tot, aber ich suchte nach einer Antwort; etwas einfaches, das mit allen gängigen Ansätzen umgehen würde. Insbesondere, wie diese Daten in einer relationalen Datenbank gespeichert werden.

Ich überlege, habe aber folgende Lösung nicht implementiert:

Tabelle: Zeitplan

ID

Name

Startdatum

Enddatum

DayOfYear (Kann eine beliebige Zahlenfolge von 1-365 sein)

DayOfMonth (Kann durch irgendeine Folge von Zahlen von 1-31)

Monat (jede Sequenz von 1-12)

DayOfWeek (Jede Sequenz von 1-7)

WeekOfMonth (Jede Sequenz von 1-5)

SkipInterval (smallint)

Ausschließen (Many2Many-Beziehung zurück zu dieser Tabelle)

Beispiele:

Wo alle anderen Werte Null sind.

Tag der Arbeit: StartDatum = 9/1/2013, TagOfWoche = 2 (Montag), Monat = 9, WocheMonat = 1

Valentinstag: StartDate = 14.02.2013, DayOfMonth = 14, Monat = 2

Jeden dritten Freitag jedes Monats: StartDate = 9/20/2013, DayOfWeek = 6, WeekOfMonth = 3

Jeden anderen Freitag: StartDate = 10/4/2013; DayOfWeek = 6, SkipInterval = 2

Jeden Wochentag: StartDate = 10/4/2013; DayOfWeek = 2-6

Jeden Tag: StartDate = 10/4/2013

Jeden Montag: StartDate = 10/7/2013, DayOfWeek = 2

Ausschlüsse können verwendet werden, um alle Feiertage aus einem Ereignisplan zu entfernen. (Niemand wird an Thanksgiving arbeiten, oder?), Vorausgesetzt, alle Feiertage wurden eingegeben.

    
mcneo 03.09.2013 23:54
quelle

Tags und Links