Architettura pulita - Come passare da "Database Driven" a "Independent of Database" [closed]

6

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 ...

  1. Scegli un caso utente.
  2. 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.
  3. 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 ...

  1. Rompa il sistema fino ai suoi principali casi d'uso ed entità. Scrivi oggetti indipendenti per ognuno di questi.
  2. 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.
  3. Implementa un'API Web utilizzando gli oggetti principali scritti nel passaggio 1.
  4. 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

    
posta kurt 29.08.2015 - 12:36
fonte

1 risposta

3

Prima di tutto, non vorrei affrontare un'architettura pulita in PHP. Uno degli obiettivi principali dell'architettura pulita è quello di consentire che l'interfaccia utente sia considerata essenzialmente un plug-in dell'applicazione, consentendo di cambiare facilmente i tipi di interfaccia utente. Andando con PHP ti stai limitando essenzialmente alle interfacce basate sul web. Se hai familiarità con un linguaggio più indipendente dall'architettura, lo sceglierei invece.

Dopodiché, vorrei iniziare sviluppando una semplice implementazione di uno o due casi d'uso con un'interfaccia utente testuale e nessun database: basta usare una collezione per archiviare i tuoi oggetti di business. Una volta che sei soddisfatto di come funziona, puoi sperimentare come collegare l'interfaccia utente e i livelli del database in modo che la tua versione originale funzioni ancora: una volta che hai funzionato, il resto dovrebbe essere abbastanza semplice.

Alcune utili cose da cercare:

  • Quadri MVC per il linguaggio che usi. MVC (o MVP) funziona bene come il livello dell'interfaccia utente per le applicazioni pulite

  • Il modello di repository per l'accesso ai dati: questo è probabilmente il modo migliore per separare il livello di accesso ai dati dal livello di applicazione

  • Architettura esagonale - questo è un nome alternativo per gli stessi concetti che Uncle Bob chiama architettura pulita e puoi trovare risorse più utili alla ricerca di questo.

risposta data 29.08.2015 - 12:59
fonte