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