Recentemente ho avuto la possibilità di contribuire a un progetto. Il progetto è molto vasto e contiene molti moduli indipendenti come la sezione del marchio, la sezione del negozio, la sezione utente, ecc. Tutti questi moduli contengono i rispettivi modelli che contengono la logica aziendale. L'amministratore ha tutte le funzionalità come aggiungere un marchio a un'organizzazione madre. Creare un utente e assegnargli qualsiasi ruolo.
Ci sono molte logiche di business in ogni modulo. Ad esempio, gli utenti normali non possono aggiungere altri utenti, ma gli utenti con ruolo di responsabile possono creare 5 utenti sotto di essi. L'amministratore può creare un numero qualsiasi di utenti. Allo stesso modo ci sono molti altri vincoli.
In questo momento quello che sto vedendo è che tutta la validazione è stata inserita nel livello controller. Ad esempio, il controller controlla innanzitutto se l'utente è un utente normale o amministratore o manager. Quindi, se è un manager, controlla quanti utenti ha già ecc. Ecc. Lo stesso vale per il modulo dei marchi e il modulo dei negozi. In questo momento il modulo admin non ha un modello, usa solo i modelli di altri moduli per eseguire operazioni. Ciò ha reso il controller molto spesso. Inoltre penso che queste convalide dovrebbero andare nel modello in quanto si tratta di regole aziendali.
Ma se inserisco queste convalide nel modello dei rispettivi moduli, ogni funzione deve essere in due versioni, una per l'amministratore e un'altra per i non amministratori. Questi porteranno alla duplicazione del codice.
- Il design attuale del controller admin che utilizza altri modelli è soddisfacente e manutenibile.
- Va bene per i modelli avere solo funzioni generiche, come in questo momento il modello utente ha funzioni generiche come l'aggiunta di utenti, il numero di utenti delegati per un utente e il controller utilizza entrambi questi metodi per eseguire l'operazione.
- Devo scrivere un wrapper su wrapper del servizio admin per ogni modulo? Ma questo distruggerà la coesione del modulo admin.
In questo momento il prodotto sta funzionando bene presto verrà aggiunto un numero di altri moduli. Come posso assicurarmi che il codice sia gestibile? Ho anche letto in molti punti che un modello dovrebbe parlare con un altro modello usando solo i servizi. Devo scrivere un servizio di amministrazione per ciascun modulo?