Questa è la continuazione di Classi e metodi di piccole dimensioni, ma il codice è ancora difficile da mantenere e seguire in quanto ho maturato il problema e rimbalzerò sulle risposte delle persone.
Ecco tutti gli elementi che dovrebbero essere modellati:
1.Model (in questo caso una directory di collegamento)
2.Validations (dei campi del modello dal modulo inviato dall'utente)
3.Le operazioni CRUD del database del modello
Sto pensando di organizzare correttamente tutti questi elementi in classi per rispettare i principi tradizionali di astrazione, accoppiamento lento e incapsulamento.
Ecco come l'ho fatto al momento, il che è scomodo da mantenere a causa di un problema di accoppiamento lento o così penso: quando devo eseguire un'operazione, mi vedo saltare in aria:
- Modulo 1:
- Classe del modello di collegamento: con solo membri dati
- Funzione di convalida che contiene tutti i dati dei modelli e restituisce un bool se non viene trovato alcun errore o un messaggio di ritorno con tutti errore di convalida. Non contiene la logica di validazione, che è contenuto in un altro modulo 4.
- Modulo 2: il file del controller Cattura le operazioni http CRUD e inviare le istruzioni a un file del servizio di utilità che contiene il database codice che eseguirà le operazioni CRUD.
- Modulo 3: il file del servizio di utilità del database Questo prende il file istruzioni inviate dal modello ed eseguono le operazioni di crude. È un modulo di una semplice funzione.
- Modulo 4: il servizio di logica di convalida Il codice di convalida nel file il modello invia semplicemente i dati dal modello alla logica di validazione file di servizio qui.
Dalle risposte di gbjbaanb nell'altra discussione, penso che il mio problema sia un problema di accoppiamento e incapsulamento. ha detto:
you should be thinking in terms of making the entity self-contained, so you can think of making the entity and operating on it in much simpler terms, like creating it is one action, validating it another and so on
Quale penso sia un punto molto importante. Quindi ho intenzione di rimodellare la mia struttura in quanto tale:
Modulo 1:
- Classe del modello di collegamento
- data members
- Crea metodo
- Metodo di aggiornamento
- Leggi il metodo
- Elimina metodo
Modulo 2: il controller Questo semplicemente catturerà le richieste http e istanzerà il corrispondente metodo della classe del modello.
Una domanda che ho è, come gestire la convalida? Logicamente inserirò il codice nella classe del modello come metodo, dal momento che è accoppiato con il modello. Ma il codice di validazione è piuttosto complesso e si trova nel proprio file di servizio, quindi come organizzarlo, considerando che la convalida potrebbe essere riutilizzata da altre classi? Il modo attuale con la funzione di convalida nel modulo del modello e la logica nel file di servizio è molto poco pratico.
Per quanto riguarda il codice del database, penso che dovrei lasciarlo nel suo modulo, che creerebbe un accoppiamento tra il modello e la classe del database, ma penso che sia inevitabile dato che verrà usato da altre classi.
Inoltre, se hai un altro suggerimento per organizzare questo, si prega di avvisare. Ad esempio, inseriresti le operazioni di crudizzazione nel modello come facevo io, o nella classe del database?