Come organizzare il codice ripetitivo?

10

Il mio team crea molti moduli web unici. La maggior parte di questi moduli invia semplicemente un'e-mail e alcuni eseguono una semplice scrittura di database.

In questo momento, ogni modulo vive nella propria soluzione separata in Visual Studio Team Foundation Server. Ciò significa che abbiamo quasi 100 progetti di moduli diversi, il che rende difficile mantenere la coerenza. Ogni modulo è unico in quanto i campi sono diversi, ma tutti fanno praticamente la stessa cosa.

Sto cercando di condensare queste cose in qualche modo, e potrei davvero usare delle indicazioni.

  • Dovrei provare a creare un file di soluzione con tutti i nostri progetti di moduli in esso? Non c'è un sacco di codice idraulico, anche se potrei creare alcune classi di supporto per aiutare con la formattazione della posta elettronica e così via. Sarebbe molto utile poter condividere CSS, JavaScript, controlli e immagini attraverso i progetti.
  • Dato che siamo un negozio Microsoft, ci sono dei vantaggi tangibili nell'andare con qualcosa come MVC su Webforms per questo specifico scenario? Sono venduto sul concetto di MVC nel suo insieme, ma mi aiuterebbe a riunire un modulo di raccolta dati a 15 campi in modo più efficiente se tutto ciò che fa è inviare una e-mail? Il modulo che mi ha fatto riflettere su questo ha un bel po 'di logica integrata per mostrare e nascondere i campi in base alle risposte dell'utente e sembra che sarebbe stato meno efficiente usare MVC e jQuery.
posta Josh Earl 18.01.2011 - 14:58
fonte

2 risposte

3

Il ri-factoring in sicurezza senza test è difficile e irto di pericoli.

Vorrei iniziare con:

  • Scrittura di casi di test che coprono il diverso tipo di input in tali forme e l'output atteso. Sembra che in realtà non ci vorrà troppo tempo perché ritieni che la maggior parte di queste forme sia identica nella funzionalità o vicina ad essa.

  • Esegui i casi di test con i circa 100 moduli (copertura del codice switch attiva per aiutarti a tracciare i percorsi del codice).

Dopo che sei in grado di vedere cosa puoi tranquillamente ritagliare, allora puoi (un esempio):

  • Esegui lo strumento di rilevamento della duplicazione del codice (non so come si chiami in .NET, in Java abbiamo CPD). Rimuovi immediatamente 13 forme identiche. Ora ri-eseguire i test - Yay! Passano tutti tranne il modulo 11, OK, quindi non possiamo ancora eliminarlo.

  • Rimuovi tutto il codice di formattazione e-mail locale e ottieni tutti i moduli per chiamare un modulo di elaborazione e-mail comune. Esegui test, passano tutti tranne uno, hhmmm OK .... Caratteri UTF-8, correggi quello nel modulo generico, esegui di nuovo i test, yay, stiamo tutti bene!

risciacqua e ripeti.

    
risposta data 18.01.2011 - 15:51
fonte
0

Suggerirei di astrarre la parte di presentazione. Usando Model / View / Controller, metti i form nella View e fagli usare lo stesso controller. Questo controller può eseguire un'azione generica, ad esempio inviare un'e-mail a un indirizzo predefinito o deviare i dati del modulo a un controller che può. In questo modo tutto ciò che devi fare per creare un nuovo modulo è creare il modulo e indirizzare l'output su quel controller. Questa architettura potrebbe essere contenuta in un singolo progetto, che ti permetterebbe di condividere CSS e javascript come accennato.

Per gestire la formattazione delle e-mail, inizierei creando un formattatore generico, ad esempio uno che elencherà solo i nomi e i valori degli elementi del modulo, così come gli altri tipi di dati come l'ora inoltrata, ecc. come vuoi. Quindi, se hai davvero bisogno di una gestione più personalizzata, aggiungi una fabbrica. La factory restituirebbe un'interfaccia di formattazione. Quindi, all'interno della fabbrica, è possibile eseguire una ricerca di un formattatore per tale modulo specifico o restituire quello generico se non esiste uno specifico. Questo design renderebbe anche più semplice il collaudo dell'unità del controller, dal momento che si potrebbe facilmente fornire un finto formattatore a scopo di test.

Per inciso, non avrei inserito l'indirizzo email come argomento dal modulo. Se hai bisogno di inviare a più indirizzi ti suggerisco di avere una tabella di ricerca che contenga tutti i moduli e l'e-mail per inviarli a. Questo potrebbe essere implementato in XML o in codice (ho visto entrambi, anche se non sono sicuro se entrambi siano migliori). Ciò consentirà agli spammer di ottenere i tuoi indirizzi email dalla pagina del modulo.

    
risposta data 18.01.2011 - 15:25
fonte

Leggi altre domande sui tag