WPF: Ricarica le parti dell'app per gestire la persistenza e la gestione della memoria

1

Ho creato un'app utilizzando Microsoft WPF. Gestisce principalmente la lettura e l'input dei dati, nonché l'associazione delle relazioni tra i dati all'interno di parametri specifici.

Essendo un principiante assoluto ho preso una decisione negativa sul design (non tanto le decisioni quanto l'uso della prima cosa che ho avuto modo di lavorare) ma ora comprendo meglio WPF ho l'impulso di ridefinire il mio codice con migliori principi di progettazione.

Ho avuto diversi problemi, ma immagino che ognuno meriti la propria domanda per chiarezza. Qui sto chiedendo modi adeguati per gestire i dati stessi. Nell'originale ho avvolto ogni riga in un oggetto quando recuperato dal database (usando LINQ in SQL), un po 'come Active Record, solo non attivo o persistente (ogni istanza di app aveva la propria parte di gestione dei dati).

L'app ha sottounità che gestiscono diversi aspetti. Tuttavia come è stato configurato ha caricato tutto quando avviato. Questo crea diversi problemi, ad esempio, spesso non sarebbe necessario caricare una parte a meno che non si lavorasse specificamente con quella parte, quindi non avrei dovuto caricare un po 'di lazy loading. Inoltre c'era un problema con la persistenza interiore perché potresti creare un nuovo oggetto / riga in un aspetto e magari impostare una relazione tra esso e l'oggetto diverso ma il nuovo oggetto non comparirebbe fino a quando il programma non fosse riavviato.

La persistenza tra le istanze dell'app non sarà un problema enorme a causa della piccola quantità di persone che utilizzano il programma.

Mentre potevo risolvere questo problema usando trucchi sporchi, preferirei rifattorizzare il programma e farlo in modo elegante, ora la domanda è come. So che ci sono diversi modi e alcuni vengono in mente:

1) Ogni aspetto del programma è il proprio UserControl che viene ricaricato / instanciato ogni volta che si naviga su di esso. Questo ti assicura solo di caricare i dati di cui hai bisogno e ottieni una certa persistenza. Il server DB si trova sulla stessa LAN e le tabelle sono piccole, quindi non dovrebbe essere un grosso problema. Lo svantaggio minore è che dovresti ricordare lo stato di ogni aspetto in modo da non iniziare sempre dal quadrato dei principianti.

2) Avere un oggetto di tipo ViewModel al livello di base dell'app con caricamento lento e qualche tipo di timeout. Quindi getterei questo oggetto lungo l'albero visivo per garantire che ogni aspetto ottenga i suoi dati dalla stessa istanza

3) Livello dati record semi attivo con metodi di caricamento statico.

4) Qualche altra idea

Quale a tuo parere è il modo più pratico in WPF, che cosa assume MVVM?

    
posta Ingó Vals 16.02.2011 - 16:06
fonte

1 risposta

3

Se hai intenzione di refactoring, ti consiglio di utilizzare il pattern di progettazione MVVM

MVVM sta per Model, View e ViewModel. Il tuo modello è oggetti di classe (come un cliente o un prodotto), la tua vista è l'interfaccia utente (file XAML) e ViewModel è ciò che combina i due. ViewModels contiene l'implementazione dell'interfaccia utente (comando Salva, comando Aggiungi) e lo stato dell'applicazione (CurrentRecords, NewRecord, SelectedRecord, ecc.)

Ci sono molti buoni articoli online che possono probabilmente spiegare MVVM meglio di me. Questo articolo è quello con cui ero solito iniziare

    
risposta data 16.02.2011 - 16:16
fonte

Leggi altre domande sui tag