Aggiungi una personalizzazione complessa per formare o creare due moduli?

1

Sto lavorando a un'applicazione WPF che importa ed esporta file di testo delimitati. A entrambe le estremità, c'è un UserControl che incapsula alcune logiche sulla configurazione del delimitatore. Ha alcuni controlli per selezionare individualmente i delimitatori e un menu a discesa 'Presets' per selezionare rapidamente alcune combinazioni comuni come CSV.

Ho ricevuto il compito di modificare la finestra di dialogo di configurazione dell'esportazione. Vogliono che la funzionalità dei preset sia modificata per coprire anche alcune opzioni di formattazione del testo che non sono correlate ai delimitatori. Le modifiche devono essere visualizzate solo nella finestra di dialogo di configurazione dell'esportazione, poiché le impostazioni in questione non sono applicabili all'importazione. Interverranno sia aggiungendo alcuni nuovi controlli, che non è male. Ma ci saranno anche dei preset aggiuntivi che non sono disponibili nella finestra di importazione, e la loro presenza potrebbe avere un impatto sul comportamento generale del dialog.

Non sono sicuro del modo migliore per farlo. Tre opzioni mi vengono in mente, ma ovviamente potrei mancarne una:

  1. Clona l'UserControl e apporta le modifiche necessarie ad esso. Ogni finestra di dialogo ora ha un controllo separato. Tuttavia, entrambi i controlli hanno un sacco di logica in comune, quindi mi sento a disagio con questo da una prospettiva DRY.

  2. Mantieni il singolo UserControl ma inserisci una proprietà 'mode'. In base alle sue impostazioni, mostra o nasconde alcuni controlli, scambia l'oggetto ItemsSource per il menu a discesa "Presets", ecc. Questo è interessante poiché implica meno copia e incolla, ma a costo di un controllo complessivo più complesso, e forse più difficile da mantenere in circolazione.

  3. Rifai l'architettura dell'intero oggetto in modo che gli aspetti relativi al comportamento siano gestiti correttamente in un ViewModel separato. Questo nuovo ViewModel dovrebbe essere programmabile in modo programmabile per rappresentare le diverse modalità di lavoro (in pratica semplicemente sostituendo l'elenco di Preset disponibili, ciascuno rappresentato come un'istanza di una classe Preset). Crea due diversi set di UI per rappresentare i diversi layout, con uno semplicemente non avendo i controlli per le opzioni a cui non importa.

Il mio istinto è che # 3 è l'opzione migliore. Sono preoccupato che sia uno sforzo eccessivo, e che sono solo troppo esigente per una delle prime due opzioni. O che ci sia un altro trabocchetto con quello a cui non ho pensato. Ho un po 'di storia con questo UserControl e il mio sentimento personale è che è una specie di PITA da mantenere, quindi voglio essere cauto nel caso in cui sono troppo esigente per la riscrittura per motivi emotivi.

    
posta Sean U 31.07.2012 - 19:37
fonte

1 risposta

0

L'opzione 1 è la soluzione facile e veloce, e se non è probabile che la logica duplicata cambi, o se qualche cambiamento probabile causerebbe divergenze nella logica duplicata, questa opzione ha senso.

Nella mia esperienza, soluzioni come l'opzione 2 diventano ingombranti a meno che non sia possibile distinguere chiaramente e semplicemente i rami per le possibili modalità. Se è possibile in questa situazione, usa questa opzione, perché ottieni il beneficio di modifiche logiche più semplici (grazie a una minore duplicazione del codice) senza la complessità dell'astrazione.

L'opzione 3 sembra essere la soluzione ideale; tuttavia, supponendo che ci vorrà più tempo per implementare rispetto agli altri due, vale la pena indovinare con la probabilità che sarete in grado di sfruttare la vostra astrazione per le pagine future. Ovviamente non possiamo saperlo con certezza, ma evitare inutili complessità semplificherà la manutenzione.

Con le informazioni fornite, sceglierei l'opzione 2 per ora, e se eventuali miglioramenti futuri richiedono modalità o moduli aggiuntivi, refactoring all'opzione 3 in quel momento.

    
risposta data 01.08.2012 - 14:02
fonte

Leggi altre domande sui tag