Ho una situazione in cui vorrei la tua opinione sull'approccio migliore che dovrei adottare.
Consideriamo 10 classi ( obj001, obj002 etc .) tutte che rappresentano alcune entità aziendali e che devono essere serializzate con XML e inviate tramite WS a un altro server. Ognuna di queste classi è supportata da uno schema XSD (dal quale sono state create). Ci sono alcune differenze nella loro struttura, quindi non possono essere trattati allo stesso modo (ad esempio uno può contenere una tabella con valori, un altro solo pochi campi statici).
Ora, devo sviluppare un'applicazione desktop (.net based, quindi Winforms o WPF), con uno schermo distinto per ogni entità, e le seguenti funzionalità: Salva in XML, Carica da XML, Invia msg (invia oltre WS), Genera documento (riempiendo un modello), Convalida oggetto ecc.
Metodi come Genera documento e Validazione devono essere implementati in modo diverso a causa della natura degli oggetti.
Attualmente ho un controllo di pagina a schede e ogni pagina contiene i campi di dati per un determinato oggetto. Tutti i pulsanti funzione sono comuni, agganciati all'inizio e, in base alla pagina attiva, eseguono l'azione corrispondente. Il flusso di eventi funziona in questo modo:
buttonSave_Clicked
switch (selected_page)
if obj001_page then
SerializeOBJ001();
if obj002_page then
SerializeOBJ002();
else ...
end
end
Ho pensato anche ai seguenti approcci:
- Crea pulsanti su ogni scheda (questo significa che saprei esattamente quale logica eseguire, ma comunque sono tutti insieme.
- Converti l'applicazione in WPF e crea controlli personalizzati per ogni oggetto, che sono totalmente responsabili della logica e dell'interfaccia utente corrispondenti - un sacco di codice ridondante!
Ad esempio, la mia classe obj001 ha oltre 20 proprietà (attributi) e tutte sono vincolate alle caselle di testo nell'interfaccia utente, quindi tutte le convalide vengono scritte ed eseguite nella classe MainWindow.cs. Spostandoli in una classe separata significherebbe passare ogni valore come parametro per il validatore, che è anche abbastanza poco pratico. Forse passare a MVVM (e usare l'associazione dati di WPF) è una soluzione migliore, non credi?
L'estensibilità è molto scarsa: per ogni nuovo oggetto, devo aggiungere un nuovo caso a ciascun pulsante di funzione. E la classe MainWindow.cs diventa sempre più pesante.
Sono nuovo nell'ingegneria del software. Partendo da zero, quale sarebbe l'approccio giusto? Quali schemi architettonici o di progettazione dovrei esaminare? E come dovrei strutturare le mie classi?
Grazie!