Presentazione di Table Data Gateway di Fowler per il refactoring di sistemi mal progettati

0

Sto sviluppando un'applicazione, che al momento contiene circa 150.000 righe di codice. Lo sviluppatore precedente non ha utilizzato alcuna disciplina durante la scrittura del codice. L'applicazione è in produzione ma è continuamente sviluppata.

Ho letto il libro di Martin Fowler ( Patterns of Enterprise Application Architecture ) e parla di " Script di transazione " e" Oggetti di accesso ai dati ". Questi sono i modelli usati cioè c'è una classe chiamata Persona, che contiene tutto ciò che riguarda la Persona e una classe chiamata Ordine con tutto ciò che riguarda l'Ordine. Le funzioni non sono riutilizzabili perché contengono tutto, ad esempio logica di accesso ai dati, logica aziendale, ecc. Ad esempio, Person.GetPerson si connetterà al database per trovare la persona, verificare l'età della persona, ottenere tutti gli ordini collegati alla persona ecc.

Sto pensando di introdurre ciò che Martin Fowler definisce un gateway dati tabella . Lo vedo come un progetto di refact a più lungo termine. Il problema è che ciò significherà incoerenza per cominciare con la logica di accesso ai dati che sarà contenuta nel nuovo Gateway, ma anche nelle classi Script di Transaction (dove l'altro sviluppatore lo ha inserito)? È una cattiva idea andare contro lo stile di codifica degli sviluppatori originali?

    
posta w0051977 15.05.2013 - 20:24
fonte

1 risposta

1

In base a Modelli di Enterprise Application Architecture , puoi utilizzare un gateway dati Table con lo schema Transaction Script (vedi Sezione "When To Use It" del pattern Table Data Gateway). Quindi il tuo approccio sembra un modo abbastanza conservativo per passare a un codice migliore senza cambiare radicalmente lo stile originale tutto in una volta - il che è una buona cosa.

Anche il refactoring dovrebbe essere abbastanza semplice - stai solo andando a trascinare la logica del database nella classe Person in una classe PersonGateway. Certo, non è possibile effettuare il refactoring simultaneo di tutte le classi Transaction Script, ma ciò è inevitabile. Probabilmente non dovrai nemmeno interrompere la loro API, quindi non mi preoccuperei troppo del fatto che per un po 'alcuni script useranno le classi gateway e altri no.

Penso che rendere questo cambiamento sia un approccio migliore rispetto a non farlo.

    
risposta data 15.05.2013 - 20:56
fonte

Leggi altre domande sui tag