Un metodo per cercare e creare se non trovato, o due metodi

1

Diciamo che sto scrivendo un'app Web che accede agli account utente in un database. Se l'account esiste usa quei dati. Ma se l'account non esiste, creane uno nuovo.

Questo dovrebbe essere fatto con due o un metodo.

Un metodo dovrebbe cercare per nome e se trovato ottenere l'account, ma avrebbe un blocco catch try e se la query restituita vuota creerebbe l'account con il nome passato.

Due metodi dovrebbero semplicemente cercare e creare.

I vantaggi di un metodo trarrebbero vantaggio dalla semplicità e dal riutilizzo del codice, ma poi quel metodo sta facendo più cose. E mi è stato detto che è una brutta cosa. Dove due metodi sarebbero separati bene ma non avrebbe alcun riutilizzo del codice.

    
posta mattNit 24.06.2015 - 00:22
fonte

2 risposte

4

Sicuramente 2 metodi.

Se hai 2 metodi, puoi impilarli e sistemarli, riutilizzandoli in una sequenza diversa o addirittura separati l'uno dall'altro.

Se hai 1 metodo con entrambe le funzionalità, puoi usarlo solo per tutto ciò che hai progettato per usarlo, quindi nessun riutilizzo del codice.

Inoltre, queste sono funzionalità diverse, quindi è meglio che siano i loro metodi.

Puoi fornire un metodo wrapper attorno a questi 2 per eseguire prima la ricerca, quindi aggiungere se la ricerca non ha restituito risultati.

    
risposta data 24.06.2015 - 00:46
fonte
1

"Aggiorna o crea se non esiste" può essere considerato una singola operazione: upsert. La cosa vera di cui preoccuparsi quando si tratta di "fare più cose" (noto anche come Principio di singola responsabilità : a la classe dovrebbe avere solo 1 motivo per cambiare) è ciò che sta gestendo l'interazione tra il DB e gli oggetti di programmazione. Qualunque cosa sia dovrebbe essere separata in un Data Access Layer (DAL). La classe specifica che gestisce la mappatura del DB utente dovrebbe dichiarare solo lo schema specifico per gli utenti; un'altra classe (forse un antenato) sarebbe responsabile della creazione / recupero e esecuzione di query (che potrebbero includere upsert, insieme alle operazioni CRUD di base di creare, leggere, aggiornare ed eliminare).

Se possibile, trovare e utilizzare una libreria / framework DAL esistente per la piattaforma. Se non riesci a trovare qualcosa di adatto, ci sono vari modelli di DAL, come Data Mapper .

    
risposta data 24.06.2015 - 02:14
fonte

Leggi altre domande sui tag