Domanda

Sto utilizzando ActiveRecord per conservare le informazioni sugli utenti. La classe User ha i metodi load (), insert (), update () ed delete () previsti, setter, getter e pochi altri. Ma ho difficoltà a decidere se includere o meno determinati altri metodi nella classe User o gestirli da parte dei collaboratori.

Ecco un esempio:

Esistono diverse transazioni che un utente potrebbe richiedere e che richiedono conferma. Questo viene gestito in modo convenzionale: l'invio di un'e-mail all'utente con un collegamento; facendo clic sul collegamento si conferma che l'utente desidera effettivamente che la transazione proceda. Un hash della chiave di verifica e la sua data / ora di scadenza persistono come parte del record dell'utente.

Dove devo disegnare la linea in questo processo? Dovrebbe esserci un collaboratore che gestisce la verifica (ad esempio prendendo la chiave di verifica in testo semplice dalla stringa di query e accettando un oggetto Utente come parametro)? O dovrebbe essere gestito internamente dalla classe User (passando la chiave di verifica in testo normale in una chiamata di metodo)?

La prossima cosa che succederebbe al momento della verifica, ovviamente, è che la transazione procederà richiedendo un aggiornamento al record attivo - e lì, mi sembra, la classe User deve avere la responsabilità.

Qualche suggerimento?

È stato utile?

Soluzione

Dovresti delegare questa attività a un collaboratore, che gestisce una tabella conferme .

Dovresti utilizzare il modello Confirmation per tenere traccia di tutti i requisiti di conferma. Il modello apparterrà a User , oltre a gestire l'hash di conferma e l'azione da confermare (ad es. activ_account , change_password o change_email ecc.).

Il controller Conferma sarebbe responsabile della convalida dell'hash di conferma e del concatenamento dell'azione appropriata sul modello appropriato (ad es. activ_account - > user.activate ( ) , change_password - > user.setPassword () ecc.) e rimuovi il Conferma dalle conferme tabella al completamento corretto.

Ciò consentirà una migliore separazione della logica e consentirà di ridimensionare meglio, ad es. per intrattenere più di una conferma in sospeso per un determinato utente (ad esempio conferma per cambiare la password e conferma per cambiare qualcos'altro.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top