Tecniche di refactoring per l'applicazione webforms di asp.net

4

Sto lavorando su una grande applicazione scritta nei moduli web di asp.net. È stato sviluppato in asp.net 1.0 e utilizza ancora DataGrid, sebbene le porzioni siano state aggiornate.

La maggior parte del codice risiede nel codebehind o nelle classi controller che non possono essere istanziate al di fuori di un IIS in esecuzione. (Il framework del controller che usiamo fornisce una gestione a vita legata allo stato della sessione.) L'accesso ai dati avviene tramite un DAL personalizzato, il che significa che la maggior parte di quel codice richiede anche un database live con i dati corretti al suo interno.

Voglio disaccoppiare il codice dal database e dal server web, in modo da poterlo eseguire sotto un cablaggio di test. Esistono buone strategie per passare da questo tipo di codice a una struttura più testabile?

    
posta Sean McMillan 02.08.2011 - 16:31
fonte

2 risposte

4

Il modo migliore sarebbe quello di ridefinire il code-behind ai livelli logici (servizi, DAO / Repository, ecc.). Osserva Model View Presenter per le idee su come astrarre il resto, ma realisticamente uno sforzo come questo è solitamente meglio servito riscrivendo la cosa correttamente; parlando dall'esperienza è very difficile da rifare i WebForm quando è fatto terribilmente, è probabile che dovrai ripetere così tanto che in pratica stai comunque riscrivendo la cosa.

    
risposta data 02.08.2011 - 19:36
fonte
1

Il problema è. che con le informazioni fornite, la gamma di risposte possibili è teoricamente infinita.

Se raccolgo i fatti concreti ottengo la seguente immagine:

  • ASP.NET 1.0 Webform
  • DataGrid
  • Accoppiamento stretto
  • Accesso dati tramite DAL personalizzato

Inoltre, non hai detto in quale direzione si sta dirigendo il tuo refactoring. Semplicemente »pulire il casino« è un buon punto di partenza, ma non abbastanza. E come @Wayne ha scovato: sarebbe finito in una riscrittura.

Ci sono almeno 2 possibilità:

1) Creare una SPA dove hai un frontend intelligente e fai di più - o almeno un buon affare - di logica nel frontend

2) Creazione di un'applicazione web convenzionale con WebAPI . Inoltre, anche se in realtà non ho lavorato con esso, ma forse vale la pena dare un'occhiata: NancyFX

A seconda di quanto è grande l'applicazione / codice base - e su quanto vuoi essere, dovresti pensare a usare microservizi

Alcuni consigli facili sono:

Data access is through a custom DAL, meaning that most of that code also requires a live database with proper data inside it.

  • Questo potrebbe essere deriso o cancellato

Per il resto, dipende:

Se il codebase è in qualche modo in forma. Cerca di indovinare, cosa fa il codice. Scrivi un test. Vedi se la tua ipotesi è valida. Se è così, scrivi un altro test, per verificare un'altra ipotesi. Se il fattore PITA è troppo alto, riscrivi completamente la logica aziendale. Altrimenti ripeti e costruisci una comprensione raffinata iterativa del codice ed evolvi una suite di test finita. Passo dopo passo stendi una rete di sicurezza attorno al codice. Se è abbastanza stretto, prendi la motosega e taglia il codice in pezzi a portata di mano.

Devo ammettere che questo è un consiglio molto generale, ma senza ulteriore conoscenza della base di codice, è difficile dare qualche consiglio concreto.

    
risposta data 18.07.2015 - 00:26
fonte

Leggi altre domande sui tag