2011-01-14 19 views
2

Was ist das nächste Entwurfsmuster für so etwas wie einen Issue Tracker?Entwurfsmuster für Verfolgung/Status

Sie haben ein Objekt, das einen der folgenden Status haben kann: open, closed, in production.

Aktionen können basierend auf dem aktuellen Status ausgeführt werden.

Meine erste Modellierung sieht ein wenig wie folgt aus:

class Status 
    - next_status (None or Status) 
    - previous_status (None or Status) 
    - actions (set of Actions) 

class Action 
    - name (string) 
    - description (string) 

Mit der Möglichkeit, Aktionen der Gruppierung und die Gruppe auf eine Status zuweisen. Ähnlich wie bei den meisten Berechtigungsmodellen könnte man sagen.

War nur auf der Suche nach Eingabe auf welches Muster dies am meisten folgt, damit ich es mehr erforschen kann. Vielen Dank!

Antwort

3

Sie repräsentieren eine finite state machine (FSM), wirklich ein Flussdiagramm, aber Ihre Klasse Design sieht aus wie ein doubly-linked list. Wenn Status den vorherigen und den nächsten Status bestimmt, ist dies praktikabel, aber in den meisten Systemen ist dies nicht richtig. Betrachten Sie in Ihrem Beispiel einen Status von "offen", ist es möglich, dass der nächste entweder "geschlossen" oder "in Produktion" sein könnte?

Wenn beiden Zustände Möglichkeiten prüfen, die Änderung des Statusobjekts und das Hinzufügen einer Transition (oder vielleicht zu ersetzen Aktion?) Objekt in die Klassenhierarchie:

class Status 
    - transitions (Transition[]) 

class Transition 
    - from (Status) 
    - to (Status) 

Status Hier weiß über das, was Übergänge möglich sind (zB „geöffnet "kann zu" geschlossen "oder" in Produktion "übergehen. Auf diese Weise repräsentieren Sie die FSM als directed graph. Auch ist es in meiner eigenen Erfahrung normalerweise nicht wichtig, die Entität wissen zu lassen, woher sie gerade kommt, also die Entfernung von prior_status. Stattdessen kann der Pfad durch Aufzeichnungsprotokollierung/Datenbanktabellenerfassungsverlauf erfasst werden.

+0

Das sieht aus wie ich will. Ich protokolliere bereits Übergänge und das gibt mir die richtige Einsicht, wie ich darauf aufbauen kann. Vielen Dank! –