Ogni classe di un modello nella mia applicazione ha un metodo create
. Il framework mi dà l'implementazione predefinita di create
che è "crea nel DB". A volte ho bisogno di eseguire alcune azioni extra durante la creazione. Esistono numerosi modi per ottenere questo risultato: posso sovrascrivere create
(e chiamare super
in seguito), comunicare i segnali (se possibile), sovrascrivere i metodi di aggancio (come before_create
), non è mai stato un problema. Il problema è che in realtà non voglio eseguire queste azioni ogni volta , i. e. queste azioni non sono in realtà parte della procedura di creazione, è parte di un'altra procedura di alto livello (rispetto alla% originalecreate
). Lo chiamano smart_create
in uno dei più grandi progetti con cui abbia mai lavorato.
Prima di procedere oltre, voglio darti un'idea di cosa sono in genere questi metodi smart_create
. Quindi, ecco l'esempio. Quando crei qualche entità per un utente, puoi avvisarlo con una email. Ma potresti non volere notifiche durante i test (potrebbe rallentarli), script stand-alone (quando ripari qualcosa che hai appena rotto) o quando un'entità viene creata tramite pannello di amministrazione (per qualsiasi motivo). La tentazione è lì per denominare questo metodo create_and_notify
, ma questo non funzionerà quando hai bisogno di altre azioni: create_and_notify_and_add_bonus_credits
non è un nome appropriato.
Quindi, qual è la domanda? Non mi piace definire i miei metodi smart_create
, ma non posso davvero dire quale sia il nome migliore. Ecco cosa ho provato e perché ancora non mi piace:
- %codice%. Cosa succede se ho due modi non banali di creare entità? Qual è il nome per il secondo? %codice%? Più di questo, come fanno gli altri sviluppatori a sapere quale metodo chiamare? Hanno bisogno di "diventare intelligenti"?
-
smart_create
class. In realtà lo stesso, ma con l'intera classe invece di un solo metodo. Nulla cambia davvero: non è ancora chiaro cosa faccia questo "creatore" e perché sia meglio che "creare". - Nessun nome. Perché il controller sa cosa fare. È solo sporco. Il problema con questo approccio è chiaro: non sarò più in grado di riutilizzare la stessa logica.
- %codice%. Qui. Questo è quello che fa veramente il metodo, ma in realtà non voglio menzionare alcuni utenti o clienti nei miei modelli: non dovrebbero sapere nulla di loro.
Credo che molti sviluppatori abbiano riscontrato situazioni del genere e voglio sapere qual è il tuo approccio abituale a questo problema.