Die Bestimmung der Klasse Verantwortung und Mitarbeiter
-
03-07-2019 - |
Frage
Ich verwende Active Informationen über die Nutzer zu erhalten. Die User-Klasse hat die erwartete Last (), insert (), update () und löschen () Methoden, Einrichter, Getter, und ein paar andere. Aber ich habe Probleme zu entscheiden, ob bestimmte andere Methoden sollten in der Benutzerklasse enthalten sein oder behandelt durch Mitarbeiter.
Hier ist ein Beispiel:
Es gibt mehrere Transaktionen, die ein Benutzer möglicherweise verlangen, dass Bestätigung. Dies wird in einer herkömmlichen Art und Weise behandelt - eine E-Mail an den Benutzer mit einem Link zu senden; Klicken auf den Link bestätigt, dass der Benutzer in der Tat die Transaktion fortfahren will. Ein Hash-Wert des Verifikationsschlüssels und es ist das Ablaufdatum / Zeit bestehen bleibt als Teil des Benutzerdatensatzes.
Wo soll ich die Linie in diesem Prozess ziehen? Sollte einen Mitarbeiter sein, die Überprüfung behandelt (zum Beispiel durch den Klartext-Verifizierungsschlüssel aus dem Query-String zu nehmen und ein User-Objekt als param akzeptieren)? Oder sollte dies durch die User-Klasse behandelt intern (vorbei an den Klartextverifikationsschlüssel in einem Methodenaufruf)?
Die sehr nächste Sache, die nach Überprüfung, natürlich passieren würde, ist, dass die Transaktion fortfahren würde ein Update des aktiven Datensatzes erforderlich ist -. Und da scheint es mir, die User-Klasse muss die Verantwortung haben
Irgendwelche Vorschläge?
Lösung
Sie sollten diese Aufgabe an einen Mitarbeiter delegieren, die eine confirmations
Tabelle verwaltet.
Sie würden das Confirmation
Modell verwenden, um alle Bestätigungsanforderungen zu verfolgen. Das Modell wird gehören User
, sowie die Bestätigung Hash-Verwaltung und die Aktion-zu-sein-bestätigt (z activate_account
, change_password
oder change_email
usw.).
Die Confirmation
Controller würde zur Validierung der Bestätigung Hash und Verkettungs die entsprechende Aktion auf dem entsprechenden Modell verantwortlich sein (zB activate_account
-> user.activate()
, change_password
-> user.setPassword()
etc.) und die Confirmation
aus der confirmations
Tabelle nach dem erfolgreichen Abschluss entfernen <. / p>
Dies wird für eine bessere Trennung der Logik ermöglichen, sowie die Möglichkeit, besser zu skalieren, z.B. mehr als eine ausstehende Bestätigung für einen bestimmten Benutzer zu unterhalten (zB Bestätigung Passwort und Bestätigung zu ändern, etwas anderes zu ändern.)