Separazione della logica di salvataggio da WinForm per renderlo riutilizzabile

1

Ho un Windows Form per la creazione di configurazioni. Ha circa 50 campi di dati, che rappresentano un gruppo di entità, che devo catturare quando l'utente preme il pulsante Salva. Attualmente, premendo il pulsante Salva, creo il gruppo di entità creando ogni entità, estraendo le informazioni dai controlli e quindi salvandole nel database.

Ora sto lavorando sulla funzionalità per importare le configurazioni parzialmente costruite da XML. Con il modo in cui funziona il pulsante di salvataggio, replicherei quasi tutto il codice di salvataggio per ottenere questo risultato.

L'unica alternativa che penso è di passare i valori dei controlli come parametri a una nuova classe che conterrà metodi che costruiscono e restituiscono un'entità. Tuttavia, il passaggio di ~ 15 parametri a ciascun metodo di creazione di entità non sembra essere una soluzione pulita.

C'è un modo pulito per disconnettere la logica di salvataggio da WinForm che mi consentirà di riutilizzare il codice di salvataggio?

    
posta Joe Dawtry 29.06.2016 - 12:03
fonte

2 risposte

1

Inizia con alcuni blocchi predefiniti:

  • crea un class MyConfigData , un semplice oggetto DTO, nessuna logica speciale qui. Dovrebbe contenere tutti i dati di configurazione che si desidera gestire

  • implementa i metodi void SetData(MyConfigData config) e MyConfigData GetData() nel tuo modulo - questi due metodi dovrebbero trasferire i dati dall'oggetto DTO al modulo e viceversa.

  • crea una classe ConfigDbRepo con un metodo Save(MyConfigData config) e MyConfigData Load() . Metti il carico del database e salva la logica qui.

  • inserisci il codice da caricare e salva i dati di configurazione da o verso un file XML in una classe simile ConfigXmlRepo . Se lo desideri, le due classi possono avere un'interfaccia comune IConfigRepo , ma non è obbligatorio.

Ciò che rimane è collegare questi pezzi insieme. Il modo in cui lo farai dipende in qualche modo dal modo in cui la tua applicazione funziona in generale, se il tuo modulo è modale o non modale e in che modo esattamente l'applicazione controlla quando caricare / salvare da un db e quando caricare / salvare in un file XML. Ma spero sia chiaro che con questi strumenti puoi caricare una configurazione da una sorgente arbitraria (Xml, Db, Form) e salvarla anche su una fonte arbitraria (Xml, Db, Form), senza alcun codice duplicato evitabile.

    
risposta data 29.06.2016 - 20:21
fonte
1
   > Is there any clean way of disconnecting the save 
   > logic from the WinForm that will enable me to reuse the save code?

Solitamente questo problema viene risolto implementando una architettura a tre livelli

  • Classe di oggetti di dati con una proprietà di tutti gli attributi utilizzati nel database e nella GUI
  • un livello gui che trasferisce i dati tra Oggetto dati e gui
  • database o livello repositry che trasferisce tra oggetto dati e database
risposta data 29.06.2016 - 13:07
fonte