Come dividere una classe di servizio in due, ma le usi ancora come una?

0

Ho una classe:

AuthenticationService

  • findLoggedInUser()

    Controlla la sessione se l'utente ha effettuato l'accesso. In caso contrario, controlla il cookie di accesso utente persistente del client e accedi.

  • loginUser($email, $pw, $remember = false)

    Accedi Utente, e se $remember è vero crea un cookie di accesso permanente per Utente e un record per esso nel database.

  • logoutUser()

    Rimuove l'utente dalla sessione e qualsiasi cookie di accesso persistente dell'utente dal client e il record corrispondente nel database.

E ho pensato che avrei dovuto separare questa classe in due classi diverse; uno che gestisce la sessione parte e uno per la parte cookie. Quindi praticamente finirei con due classi con più o meno gli stessi metodi, ma avendo cura di una diversa responsabilità.

Quale sarebbe il modo migliore per combinarli insieme, come se avessi una sola classe AuthenticationService ?

    
posta Kid Diamond 15.09.2014 - 02:44
fonte

1 risposta

1

Pensa al livello di astrazione.

Uno sviluppatore che usa la classe AuthenticationService non si preoccupa se, sotto la cappa, la classe utilizza cookie, sessione, database o alcuni parametri magici all'interno di un URI. Ha senso avere sia findLoggedInUser() che loginUser() nella stessa classe.

La classe stessa, d'altra parte, si basa su un'astrazione più bassa: potrebbe sapere se utilizzare i cookie o la sessione, ma non si preoccupa dell'effettivo meccanismo sottostante (come il modo in cui vengono gestite le sessioni: tutto ciò che conta deve essere in grado di ottenere e impostare le variabili di sessione).

Ciò significa che puoi mantenere AuthenticationService e creare due classi aggiuntive:

  1. class AuthenticationCookieHandler

    • void CreateCookie(User user)
    • UserId FindUser()
  2. class Session

    • bool IsAuthenticated()
    • User FindCurrentUser()
    • void AssignUser(User user)
    • void Reset()
risposta data 15.09.2014 - 03:08
fonte

Leggi altre domande sui tag