Stiamo vivendo una discussione accesa su questo al lavoro: Per semplicità, userò degli esempi nella domanda.
Supponiamo che ci sia un'applicazione con un modulo di richiesta account, per il quale abbiamo questi requisiti:
- Le date e l'email devono corrispondere a un'espressione regolare
- Se l'utente ha già una richiesta di account, non dovrebbe richiedere un altro
Il problema è: dove verificare il secondo requisito?
-
Se controlliamo il controller, dovremmo accedere al database da lì ed è una logica aziendale, quindi non sembra giusto.
-
Se verifichiamo sul livello aziendale, dovremmo in qualche modo restituire le informazioni di convalida in caso di convalida fallita. Fare questo richiederebbe:
- Ogni metodo di business ha un parametro "out";
- Dobbiamo incapsulare il nostro oggetto di ritorno in un oggetto "risposta" con le informazioni di convalida
- L'uso delle eccezioni in caso di convalide fallite (che, secondo me, rientra nell'anti-pattern dell'uso di eccezioni per il flusso di programma).
Come dovremmo progettare questo?