Memorizzazione e accesso alle impostazioni dalla query del database

0

Sto cercando di capire il modo migliore per farlo, quindi sentiti libero di criticare il mio processo di pensiero.

Il mio strumento ha diverse impostazioni locali e ogni locale può avere impostazioni diverse per lo strumento. Ad esempio, l'Arizona potrebbe avere le 5 migliori statistiche attivate dove non lo è la California.

Prendo tutte le impostazioni in base alle impostazioni locali e disponiamo di un array di dati:

    SimpleXMLElement Object
(
    [settings] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [settingName] => Home Page Stats
                    [settingDescription] => Show the Top 5 Teammate / Teamleader stats?
                    [requireValue] => 0
                    [localeID] => 14
                    [status] => 1
                    [value] => SimpleXMLElement Object
                        (
                        )

                    [settingID] => 3
                )

            [1] => SimpleXMLElement Object
                (
                    [settingName] => Test
                    [settingDescription] => Testing
                    [requireValue] => 1
                    [localeID] => 14
                    [status] => 1
                    [value] => 66
                    [settingID] => 5
                )

        )

)

Quello che devo essere in grado di fare è ottenere informazioni basate su un'impostazione corrente. Non saranno mai nello stesso ordine, quindi non posso farlo per posizione nell'array. Devo poter accedere ai dati in base al nome dell'impostazione.

Ho provato alcune cose con l'iterazione sulla matrice e ottenendo il valore di cui ho bisogno in quel momento, ma sembra che non sia un ottimo modo per farlo.

C'è un modo migliore per archiviare / accedere a questi dati?

Devo solo essere in grado di dire che If setting name "Home page stats ha uno stato di 1 , quindi prendermi il suo valore.

Mi sento come se potessi renderlo più complicato di quanto dovrebbe essere.

    
posta SBB 28.07.2014 - 16:48
fonte

2 risposte

2

Hai provato a impostare una chiave in un array associativo? Ogni sito ottiene un identificatore univoco e acquisisci il valore specifico del sito con $ o- > l'impostazione [$ siteID] ti darebbe l'oggetto di impostazione corretto? È possibile che il codice in esecuzione su un sito possa interrogare potenzialmente le impostazioni di un sito diverso. Se [impostazioni] era anche un oggetto SimpleXMLElement che potresti utilizzare e una query xpath per trovare l'elemento giusto.

SimpleXMLElement Object
(
    [settings] => Array
        (
            [Home Page] => SimpleXMLElement Object
                (
                    [settingName] => Home Page Stats
                    [settingDescription] => Show the Top 5 Teammate / Teamleader stats?
                    [requireValue] => 0
                    [localeID] => 14
                    [status] => 1
                    [value] => SimpleXMLElement Object
                        (
                        )

                    [settingID] => 3
                )

            [Test] => SimpleXMLElement Object
                (
                    [settingName] => Test
                    [settingDescription] => Testing
                    [requireValue] => 1
                    [localeID] => 14
                    [status] => 1
                    [value] => 66
                    [settingID] => 5
                )
            [Another Site] => SimpleXMLElement Object
                (
                    [settingName] => Another Site
                    [settingDescription] => Another Site
                    [requireValue] => 1
                    [localeID] => 14
                    [status] => 1
                    [value] => 66
                    [settingID] => 5
                )
        )
)

Oltre a ciò, hai pensato di avere un piccolo file di configurazione (.ini, .json o .xml) per ogni sito e basta leggerlo mentre carichi il sito? O passare ad una pura struttura SimpleXML invece di mescolare un array in esso? Renderebbe l'intera struttura percorribile con xpath (anche se potrebbe essere più intensivo del processo di quanto valga la funzionalità).

    
risposta data 16.08.2014 - 00:52
fonte
0

Questa sembra la perfetta applicazione del modello di strategia. L'idea di base è che hai un sacco di strategie diverse (queste sono le impostazioni di connessione al database nello scenario) e in base a una condizione (questa è la versione locale dello scenario) che esegui una strategia specifica.

L'esempio migliore che ho visto per descrivere questo modello ha a che fare con un'applicazione di checkout che deve calcolare le tasse in base al paese di origine. Ci sono molti modi per implementarlo. L'esempio seguente utilizza un'istruzione if basata sul tuo paese. Se avessi bisogno di supportare 2 o 3 paesi, allora sarebbe sufficiente. Se avessi bisogno di supportare 20 paesi, allora dovresti mettere la logica in oggetti diversi.

class TaxStrategy {
    public double CalculateTaxByCountry(String country, double amount) {
       if (country equals "Canada") {
           return 0.12 * amount;
       }
       else if (country equals ("USA")) {
           return 0.05 * amount;
       }
    }
}

class Main {
    public static void main(String[] args) {
        TaxStrategy taxStrategy = new TaxStrategy();
        String countryOfOrigin = "Canada"; // you would get this from the user
        double amount = 15.84;
        double tax = taxStrategy.CalculateTaxByCountry(countryOfOrigin);
    }
}

Maggiori informazioni su questo modello sono disponibili qui: link C'è un esempio in questo link che mostra come per implementarlo con le classi. L'esempio che ho fornito mostra l'idea di base su come il pattern funziona al suo livello più semplice.

    
risposta data 28.07.2014 - 17:52
fonte

Leggi altre domande sui tag