Come fare riferimento ai valori del database di supporto in tutto il codice?

0

In che modo i dati necessari archiviati nel database devono essere referenziati nel codice? È meglio fare riferimento a un ID numerico, a incremento automatico o a un nome / chiave alfanumerico univoco, ecc.? Ad esempio:

  • Determinazione della visualizzazione della pagina basata su una specifica impostazione / valore, ad esempio da una tabella del database
  • Recupero di un valore massimo memorizzato nel database per la visualizzazione di un elenco di elementi in una pagina

È una buona pratica definire costanti nel codice per fare riferimento a queste cose, come le seguenti? O c'è un approccio completamente migliore?

/* Code to define constant references */

// Numeric, auto-incrementing ID?
define('SETTING_A', 134);
// Or unique name?
define('SETTING_B', 'PageDisplaySetting');

/* Code to retrieve settings/values */

$settingA = $db->query('SELECT Value FROM Settings WHERE ID = ' . SETTING_A);
$settingB = $db->query('SELECT DisplayMaxItems FROM Table WHERE ID = ' . SETTING_B);
// etc.

/* Code to render display based upon these settings/values */
...
    
posta reformed 19.11.2017 - 07:00
fonte

1 risposta

1

Per quanto riguarda la domanda chiave ID vs.: le tue impostazioni sembrano essere essenzialmente coppie chiave-valore. Quindi rappresentarli con SettingKey e SettingValue sembra essere il modo più naturale di andare. Le chiavi dovrebbero essere definite da qualche parte, proprio come hai proposto tu.

Inoltre, dovresti probabilmente nascondere il fatto che sono memorizzati in un database. Penso che tu abbia due opzioni ragionevoli per fare questo:

  1. Un oggetto impostazioni, ad es.

    class Settings
    {
        var $entries_per_page;
        var $date_format;
    }
    

    con una funzione loadSettings() che restituisce un'istanza della classe Settings . È quindi possibile caricare le impostazioni all'inizio e passare l'oggetto dove necessario, o memorizzarlo globalmente. Quindi accedi ai valori solo tramite $mySettings->entries_per_page .

    Puoi espandere come necessario, ad es. rendendo i campi private e fornendo getter, hanno funzioni loadSettings() alternative, se vuoi passare a file di testo invece di un DB, o andare per una SettingLoader classe / interfaccia ecc.

  2. Caricare secondo necessità, con una funzione getSetting($settingKey) . Questa funzione può quindi eseguire la query necessaria.

L'opzione 1 ha il vantaggio di poter caricare tutto in una chiamata al database. L'opzione 2 ha il vantaggio che puoi caricare solo ciò di cui hai bisogno, ma dovrai fare più query. A meno che tu non abbia una quantità enorme di impostazioni alle quali accedi solo raramente, ti consiglio l'opzione 1.

In ogni caso, il recupero delle impostazioni dovrebbe essere nascosto nella tua funzione loadSettings o getSetting . Per il resto dell'applicazione, dovrebbe esserci un modo per accedere ai valori in base a chiavi predefinite.

    
risposta data 23.11.2017 - 21:51
fonte

Leggi altre domande sui tag