Lettura da un file e inserimento in un database, una buona pratica

3

Sto facendo un'applicazione Android che legge diversi file JSON e inserisce le informazioni di lettura in tabelle nel mio database. Ad esempio, ci sono tre file:

  1. countries.json

    {
        "countries": [
            {
                "name": "United States",
                "org_ids": [
                    {
                        "id": 1
                    },
                    {
                        "id": 2
                    },
                    {
                        "id": 3
                    }
                ]
            },
            {
                "name": "China",
                "org_ids": [
                    {
                        "id": 1
                    },
                    {
                        "id": 2
                    }
                ]
            },
            {
                "name": "Hong Kong",
                "org_ids": [
                    {
                        "id": 3
                    },
                    {
                        "id": 4
                    },
                    {
                        "id": 5
                    }
                ]
            }
        ]
    }
    
  2. orgs.json

    {
        "orgs": [
            {
                "id": 1,
                "name": "UNO"
            },
            {
                "id": 2,
                "name": "Organization of American States"
            },
            {
                "id": 3,
                "name": "INTERPOL"
            },
            {
                "id": 4,
                "name": "European Union"
            },
            {
                "id": 5,
                "name": "The Commonwealth of Nations"
            }
        ]
    }
    
  3. continents.json

    {
        "continents": [
            {
                "id": 1,
                "name": "Africa"
            },
            {
                "id": 2,
                "name": "North America"
            },
            {
                "id": 3,
                "name": "South America"
            },
            {
                "id": 4,
                "name": "Asia"
            },
            {
                "id": 5,
                "name": "Europe"
            },
            {
                "id": 6,
                "name": "Australia"
            }
        ]
    }
    

Per favore non prestare attenzione ai contenuti dei miei JSON, essi non contengono membri reali delle organizzazioni internazionali elencate. È solo un esempio.

Vedo due modi.

THE EXWAY.

Archivia ogni paese con i suoi dati in un'istanza di classe e definisci SparseArray contiene un ID paese come chiave e un oggetto CountryInfo come valore.

/** Each item contains country's ID (key) and respective data (value) */
    private SparseArray<CountryInfo> mCountriesInfo = new SparseArray<JsonParser.CountryInfo>();

Dopo aver letto tutto dai file, i dati di SparseArray verranno inseriti nel database.

    private class CountryInfo {

    String mCountryName;
    int continentId;
    String mContinentName;
    /** Contains IDs (keys) and names (values) of organizations */
    SparseArray<String> mOrgNames = new SparseArray<String>();

}

Inconvenienti.

  • Più JSONS (o JSON più complessi) più complessa è la classe per la conservazione.
  • Duplicazione dati

Vantaggi

  • La lettura e l'inserimento non dipendono l'uno dall'altro.

THE LATTER WAY.

Leggi e inserisci senza salvataggio preliminare.

Inconvenienti.

  • La logica del database e la logica di lettura sono miste.

Vantaggi.

  • Nessuna classe aggiuntiva.
  • Nessuna duplicazione dei dati.

Quale è una pratica migliore?

    
posta Maksim Dmitriev 14.05.2013 - 11:08
fonte

1 risposta

3

(Questa è una domanda Java, immagino?)

Sono sicuro che puoi scrivere un lettore JSON che accetta una funzione di elaborazione arbitraria e applica tale funzione a ogni record. La "funzione di elaborazione" può essere passata in modo funzionale o se sono disponibili solo versioni precedenti di Java, sotto forma di un'interfaccia. Questo ti dà la logica di lettura senza alcuna logica di database. Quindi, fornisci una specifica funzione di elaborazione / implementazione dell'interfaccia che contiene la logica del "database insert".

Di conseguenza, ottieni il database separato e la logica di lettura senza gli svantaggi del tuo primo approccio.

Questo è anche conosciuto come Modello visitatore .

    
risposta data 14.05.2013 - 13:27
fonte

Leggi altre domande sui tag