La preoccupazione è un concetto semplice ma potente. Esiste per la riusabilità del codice. Fondamentalmente, l'idea è di estrarre pezzi di codice comuni e/o specifici al contesto per ripulire i modelli ed evitare che diventino troppo grassi e ingestibili.
Desidero specificare esplicitamente che è necessario utilizzare gli oggetti di servizio per fornire funzionalità che non riguardano lo specifico oggetto. Ad esempio, un'organizzazione ha molti utenti. Ora l'amministratore dell'organizzazione deve esportare un CSV di tutti gli utenti per questa organizzazione. Questo codice può essere inserito nel modello di organizzazione ma poiché non è la responsabilità dell'oggetto dell'organizzazione, questo codice deve essere inserito in una classe in cui si passa solo l'oggetto dell'organizzazione e si restituisce il CSV di tutti gli utenti.
class Services::GenerateCsv
def self.get_users org
#add logic the fetch users for the org and generate the CSV and return the CSV data
end
end
Ogni volta che hai bisogno della generazione CSV, puoi inserire quella logica nella classe precedente. Questo approccio mantiene l'oggetto (in questo caso il modello organizzativo) pulito dal codice che non dovrebbe essere di sua competenza. Un principio generale che seguo è: se il codice sta modificando l'oggetto autonomo, sposta il codice su un oggetto servizio.
Nota: la domanda riguardava problemi, ma ho pensato di aggiungere alcuni elementi aggiuntivi che seguo per mantenere il codice base pulito e gestibile in quanto potrebbe aiutare gli altri programmatori. Questo approccio sopra è discutibile.
fonte
2014-03-14 04:04:21
fantastico, grazie! Quindi dovrei lasciarli? Stavo per cancellarli se non sono necessari –
Sì, dovresti tenerli in giro in modo che siano lì quando ne hai bisogno. Assicurerà inoltre che le cartelle vengano notate dal sistema di controllo della versione. – Josh
Devo inserirli nel mio '.gitignore'? Preferirei non commettere file vuoti. – tbodt