Non valido o altro risultato nell'operazione DDD

0

Se questa è una domanda di base scusa, ma in ogni caso è una domanda.

Sto facendo un progetto basato su domini, so di RootAggreegate, Modello anemico, modello ricco, servizi di dominio e ...

ma ancora quando si tratta di aggiungere o aggiornare un modello non so quale schema ha senso usare '? dovrei retun void, o dovrei restituire un oggetto di risultato dell'operazione.

class operationResult {
public List<string> ErrorMessages {get;set;}
public OperationStateEnum Status {get;set;}
}

void addBook(book)

o

operationResult addBook(book) 
    
posta Arash 18.11.2018 - 06:35
fonte

2 risposte

3

L'idioma prevalente nei linguaggi orientati agli oggetti è di restituire void .

La ragione è che i chiamanti si aspettano che i metodi siano componibili attraverso il sequenziamento, ovvero, scrivendoli uno dopo l'altro, separati da punto e virgola ( ; ). Sarebbe solo un lavoro troppo ripetitivo per avere una condizione dopo ogni invocazione di metodo per verificare se ha avuto successo o meno (basta guardare C). Ecco perché ci sono Exception s.

Quindi rendi void e lancia un Exception se c'è qualcosa di sbagliato, altrimenti il chiamante dovrebbe assumere l'operazione riuscita.

    
risposta data 18.11.2018 - 06:50
fonte
2

Se il tuo metodo addBook è progettato in modo che possa sempre avere successo, è preferibile un vuoto. Se il tuo metodo esegue la convalida su book, restituire un risultato è meglio quindi gestirlo con eccezioni.

Secondo me, le eccezioni dovrebbero essere utilizzate solo per situazioni eccezionali; se un database o un servizio web non funzionano, lanciare un'eccezione, ma se il titolo deve essere univoco e non lo è, non varcherò un'eccezione ma restituirò un risultato.

Questo lo riassume bene:

Il metodo è un comando e non può fallire:

public void Save(Customer customer)

Il metodo è una query e non può fallire:

public Customer GetById(long id)

Il metodo è un comando e può fallire:

public Result Save(Customer customer)

Il metodo è una query e può fallire

public Result<Customer> GetById(long id)

Fonte: link

Ulteriori letture: link

    
risposta data 18.11.2018 - 15:06
fonte

Leggi altre domande sui tag