Sto cercando una certa chiarezza e, si spera, qualche consiglio su come scrivere un'architettura pulita per un grande sistema. La "soluzione Web" delle mie aziende ha + -10 anni, il mio compito è di riscriverla. È scritto su alcune migliaia di pagine classiche asp tutte con le loro query SQL con assolutamente zero consistenza (trascorro la maggior parte del mio tempo di manutenzione / debug fissandole poiché i prodotti possono apparire in una ricerca e non un'altra ecc.). Per dirla senza mezzi termini, il nodo intricato di codice uscito dai miei peggiori incubi da affrontare.
Fino a ieri ho avuto un piano abbastanza lineare per il re-sviluppo e per risolvere i miei problemi di incoerenza ...
- Scegli un caso utente.
- Scrivi una o due funzioni proc / sql memorizzate per controllare il flusso di dati per il caso selezionato, ovvero salva utente, aggiungi utente, modifica utente ecc.
- Aggiorna le pagine asp pertinenti sul sistema corrente per utilizzare i proc / funzioni sopra.
Obiettivo finale - finire con un'applicazione interamente basata su database, pur ottenendo la necessaria stabilità e amp; integrità durante lo sviluppo. Una volta raggiunto questo obiettivo, stavo progettando di scrivere un'API Web (utilizzando le stesse procedure del database) e quindi implementare un'interfaccia utente Web, un'app per dispositivi mobili e qualsiasi altra cosa necessaria in cima a questa API. Per quanto scoraggiante, questa mi è sembrata una soluzione abbastanza decente, anche con i suoi difetti è esponenzialmente migliore di quella con cui dobbiamo lavorare attualmente.
Poi ho trovato Guida di Uncle Bobs per pulire l'architettura .
Capisco il concetto e sembra fantastico, tutto troppo bello per essere vero dalla mia attuale posizione, ma più approfonditamente l'ho approfondito diventando più complicato in termini di "Questo è fantastico! Ora come lo implementerei?" Una delle regole che la guida richiede è che l'applicazione sia completamente indipendente dal database, il che significa che ciò che avevo programmato non avrebbe mai fatto il taglio. Dovevo ammettere il freddo e duro fatto che questo è un concetto completamente estraneo per me, sin dal primo il giorno in cui ho iniziato a imparare a programmare il cuore e l'anima dell'applicazione era il DB, quindi è molto difficile per me regolare il mio processo mentale e non trattarlo come tale.
Ho effettuato ulteriori letture e speravo in qualche feedback se stavo o no sulla strada giusta, o se c'è un taglio più pulito, un approccio più pulito.
PHP è la mia lingua principale per la maggior parte delle applicazioni Web, quindi questo è il linguaggio che la mia teoria sarebbe probabilmente implementata in ...
- Rompa il sistema fino ai suoi principali casi d'uso ed entità. Scrivi oggetti indipendenti per ognuno di questi.
- Scrive un modello di interfaccia dati, che viene estratto dal database (poiché il database è attualmente l'origine primaria per i casi d'uso e la logica dell'entità probabilmente gli oggetti sopra riportati si basano sulla loro tabella corrente). Ciò mi consentirebbe di mantenere qualsiasi cosa correlata al DB in una posizione e fornire lo stesso risultato di integrità e coerenza che implementerebbe le funzioni memorizzate proc / sql, anche se ciò non renderebbe l'applicazione "indipendente dal database" poiché dovrei modificare l'astrazione strato se ho cambiato provider cioè da SQL Server a Oracle. È qui che entra in gioco la mia incertezza, è un buon approccio? È altamente improbabile che cambierei le origini dati, ma chi lo sa? Inoltre, se seguirò l'architettura della guida, voglio farlo il più vicino possibile e so che se questo passaggio non viene implementato correttamente, ciò vanificherebbe lo scopo poiché il livello del database inizierà lentamente a filtrare nel modello di applicazione principale.
- Implementa un'API Web utilizzando gli oggetti principali scritti nel passaggio 1.
- Implementa l'interfaccia utente basata su API per qualsiasi piattaforma necessaria.
Mi scuso per il saggio ma volevo essere il più chiaro possibile nella speranza che questo mi aiuti a ottenere la migliore guida. Mi piacerebbe davvero imparare e un giorno essere molto abile in questo tipo di architettura e mentre ci sono un sacco di informazioni online sulla sua struttura e sul suo concetto, c'è pochissimo su come implementarlo, o più su come cambiare il tuo modo di pensare quando si sviluppa un'applicazione quando si è abituati al database come nucleo assoluto dell'applicazione.
Qualsiasi tipo di feedback sarà molto apprezzato e apprezzato. Grazie