Ich habe ein Design-Problem, das ich gerne etwas eingegeben würde. Hier sind die Einschränkungen:Design der Konto E-Mail-Aktivierung (mit Hibernate im Hinterkopf)
- Jeder Benutzer muss eine funktionierende E-Mail-Adresse bei der Registrierung ihres Kontos haben. Bei der Registrierung ihres Benutzerkontos sollte eine Aktivierungs-E-Mail gesendet werden, die einen Link mit einem Aktivierungscode enthält, der befolgt werden muss, damit das Konto aktiviert wird.
- Jedes Benutzerkonto existiert in genau einem Büro, das in genau einer Firma existiert.
- Der erste registrierte Benutzer eines Unternehmens erstellt das Unternehmen und ein Büro. Der Rest der Firmenbenutzer wird dann vom ersten Benutzer eingeladen.
- Die Unternehmen können miteinander interagieren, jedoch nur, wenn die ersten Benutzer des Unternehmens aktiviert werden (d. H. Sie haben nach der Registrierung auf die entsprechenden Aktivierungslinks geklickt).
Hier ist ein kleines UML-Diagramm, wie es gelöst werden könnte:
alt text http://i43.tinypic.com/2dj5bhh.png
In dem obigen Diagramm einige Details weggelassen. Das Diagramm zeigt nur Klassen und Felder. Wenn es um Felder geht, die nur konzeptionell verwendet werden, um zu zeigen, welche Informationen gespeichert werden sollen, ignorieren Sie bitte deren Gültigkeitsbereich.
Einige Gedanken und Fragen:
- User und NotActivatedUser sind meist die gleichen. Sollten sie eine einzige Klasse oder getrennt sein? Wenn sie getrennt sind, welche Form der Hibernate-Vererbungs-Persistenz würden Sie verwenden?
- Wenn ein Konto nach einer bestimmten Zeit nicht aktiviert wird, sollte es entfernt werden. Wenn es der erste Benutzer war, der auch die Benutzer Firma und Büro erstellte, sollten beide ebenfalls entfernt werden. Brauchen wir auch NotActivatedOffice und NotActivatedCompany? (Für saubere Trennung in der Datenbank.)
Wie würden Sie diese Art von Lösung entwerfen? Halten Sie es für wichtig, nicht aktive und aktive Einheiten in der Datenbank getrennt zu halten? Warum oder warum nicht?
Die Amtsinhaberflagge scheint unnötig; Es sollte eine wirklich einfache Abfrage sein, um Büros zu finden, die von einem bestimmten Benutzer erstellt wurden. –
Nur wenn Sie eine Rückverweisung vom Büro zum Benutzer haben. Dies wäre eine weitere Option. –