Dictionary Of Dictionary

di il
7 risposte

Dictionary Of Dictionary

Buongiorno.

 Avendo una tabella di database contenente pochissime righe, il cui contenuto però deve essere recuperato molte volte nel corso dell'applicazione, vorrei trasferirla interamente in un oggetto di tipo Dictionary(Of String, Dictionary(Of String, String)), in cui il dictionary più esterno contiene un elemento per ogni riga della tabella, mentre quello più interno contiene un elemento per ogni campo (nome del campo, valore del campo).

Il caricamento delle due strutture avviene regolarmente, ma il recupero dei dati contenuti mi restituisce sempre i dati corrispondenti all'ultima riga della tabella originale.

Questo è il LINK di un mini-progetto per chi volesse spendere qualche minuto a questo piccolo mistero.

Grazie.

7 Risposte

  • Re: Dictionary Of Dictionary

    Sposta

    Dim Dict2 As New Dictionary(Of String, String)

    al posto di

    Dict2.Clear()
  • Re: Dictionary Of Dictionary

    OK funziona, ma non capisco il perché.

  • Re: Dictionary Of Dictionary

    Al Dictionary principale aggiungi dei riferimenti allo stesso Dictionary creato una sola volta di cui cambi sempre il contenuto (ovviamente varrà solo l'ultimo. Per capirci è come se aggiungessi un puntatore alla stessa variabile di cui cambi il contenuto.

    Quindi devi creare un'istanza diversa per ogni Dictionary interno.

    E' un errore comune quando si lavora con i riferimenti agli oggetti (con cui lavorano le Add).

  • Re: Dictionary Of Dictionary

    Capito. Grazie. Ciao.

  • Re: Dictionary Of Dictionary

    Posso chiedere come mai questa soluzione anziché utilizzare Dataset e Datatable che espongono già tutti i metodi necessari alla sua gestione?

  • Re: Dictionary Of Dictionary

    19/08/2024 - Dev-01 ha scritto:


    Posso chiedere come mai questa soluzione anziché utilizzare Dataset e Datatable che espongono già tutti i metodi necessari alla sua gestione?

    A meno che l'obiettivo non sia supportare velocemente un editing in griglia, o in controlli visuali analoghi, di dati tabellari provenienti da database e che non sono in alcun modo necessari alla logica principale dell'applicazione, e già siamo in un contesto limite, ad oggi eviterei il più possibile l'uso di DataSet e affini:

    • sono classi dispendiose in termini di memoria e tendenzialmente più lente, senz'altro più di un dizionario;
    • le ricerche dei dati sono prevalentemente basate su query simil-SQL che vengono applicate a dati in memoria e non su database, quindi si aggiunge un ulteriore layer di complessità (es. nel parsing delle espressioni);
    • tutti i dati estratti da tabelle e dataset devono essere “castati” al tipo corrispondente per poter essere tipizzati;
    • rispetto a un modello a oggetti, i nomi dei campi e delle tabelle tendenzialmente sono espressi come stringhe e poco inclini al refactoring (se ci si scorda di aggiornare il nome di un campo che è cambiato, in fase di build non da errore ma questo si presenta solo a runtime, e solo se si passa da quel punto);
    • il supporto a LINQ è limitato (per tutti i motivi suindicati), senz'altro di più rispetto a dizionari di oggetti;
    • la struttura tipica tabellare è strettamente legata al formato dei dati di un tradizionale database RDBMS, ma non sempre è una rappresentazione ottimale degli stessi valida in tutti i contesti.

    In pratica, usare un DataSet è utile e da benefici esclusivamente nel suo contesto specifico di utilizzo: quando è necessario scaricare dati da uno o più tabelle di un database relazionale col modello “briefcase” allo scopo di modificarli offline e pubblicare gli aggiornamenti tramite il relativo DataAdapter della libreria ADO.NET di accesso al database in uso. In tutti gli altri scenari, meglio soluzioni alternative più "object oriented".

  • Re: Dictionary Of Dictionary

    19/08/2024 - Dev-01 ha scritto:


    Posso chiedere come mai questa soluzione anziché utilizzare Dataset e Datatable che espongono già tutti i metodi necessari alla sua gestione?

    Perché, al di là delle motivazioni tecniche illustrate da Alka, questi dati non necessitano di alcuna “gestione”, ma devono essere acquisiti inizialmente una tantum e poi utilizzati molte volte e frequentemente nel corso dell'applicazione. Avrei potuto anche usare un array a tre dimensioni, ma con oggetti di tipo dictionary sono ancora più svincolato dalla struttura originale della tabella.

Devi accedere o registrarti per scrivere nel forum
7 risposte