Domanda

Sono in fase di ristrutturazione il nostro CMS e ho incontrato una situazione che non so quale soluzione adottare. In pratica ognuno dei nostri clienti ospita i contenuti del loro sito Web nella propria banca dati. Questo include il contenuto, indagini, parole usate dai visitatori, menù strucutre, ecc ricerca.

Un sacco di contenuti sui siti web dei nostri clienti è dinamico e li può cambiare attraverso il CMS. Tutti questi dati vengono salvati in un database relazionale che ho progettato, ma sto correndo in alcune situazioni in cui tiene queste preferenze in una tabella sarebbe un errore.

Per esempio, il CMS consente loro di inviare messaggi di posta elettronica ad un elenco di destinatari. Essi possono scegliere di utilizzare il nostro server o possono mettere nel proprio server SMTP. Tuttavia, in questo caso sarebbe un po 'eccessivo per creare una tabella con una colonna per "Mailservice" e falla tenere valori specifici poiché la tabella sarebbe titolare di una sola riga.

Ecco le poche idee che mi è venuta in mente cercando un po 'su questo sito e / o Google, ma io non sono troppo sicuro di quello che i loro pro e contro sono:

  • In sostanza tenere tutte le preferenze in una tabella come ho già detto, qualcosa che mi piacerebbe evitare.
  • Tenere tutte queste preferenze "single" in un file XML che non avevo modifico quando cambiano le loro impostazioni.
  • ha una tabella chiamata preferenze con la seguente columsn: id, preferenceName, valore. Ogni volta che avrebbe avuto una nuova preferenza Avevo solo aggiungere che, modificarlo, o rimuoverlo (non mi piace questa opzione perché sento che avrei dovuto codificare troppi valori ... almeno dal modo in cui sto vedendo l'attuazione)

Sono un po 'pendente verso l'idea di XML, ma mi piacerebbe ottenere un feedback dal bene della comunità qui a StackOverflow :) Forse utilizzando XML sarebbe un'idea orribile per un motivo ho completamente trascurato o c'è un your-dumb-perché-hanno ragione't-you-solo-do-questa soluzione. Grazie per ogni ingresso!

È stato utile?

Soluzione

Il percorso XML funziona bene, nel senso che permette facilmente nuove attriutes da aggiungere e consente attributi per essere raggruppati. Lo svantaggio è che è impossibile migrare o aggiornare preferenza dati utilizzando SQL. Essa deve essere fatto programatically. Si può anche non in caso di necessità di query preferenze per i singoli attributi.

Tutti a dire, se si sta mantenendo un piccolo numero di preferenze in cui non v'è alcuna necessità di query o aggiornarli tramite SQL, XML dovrebbe funzionare bene per voi. In caso contrario, il tavolo coppia nome, valore nel database sarebbe un modo migliore per andare.

Altri suggerimenti

direi tabella del database utilizzare uno se si dispone già di che, e dividere i nomi delle impostazioni in categorie sensibili:

mail_service:recipients
mail_service:sender
mail_service:smtp:hostname
mail_service:smtp:username
mail_service:smtp:password

Oltre a questo, preferisco di gran lunga YAML a XML per l'amor di leggibilità. E 'come XML, ma senza tutto il disordine.

 mail_service:
     recipients:
       - recipient1@domain.com
       - recipient2@domain.com
       - recipient3@domain.com
       - recipient4@domain.com

  visuals:
    header:
      text_color: #BBCCDD
      background_color: #FFFFFF

Il classe Symfony YAML è una libreria autonoma multa per analizzare il file in un array PHP.

Si potrebbe anche usare un semplice file PHP.

$settings = array(
 "mail_service:recipients" => " .... ",
 "mail_service:sender" => " .... ",    
 "mail_service:smtp:hostname" => " .... ",
 "mail_service:smtp:username" => " .... ",
 "mail_service:smtp:password" => " .... ");

vorrei andare con il file XML (anche se non ha bisogno di essere XML - se fosse Java userei un file di proprietà fino a quando ho trovato una ragione per non) o una tabella chiave singola / value (il campo ID non guadagna molto di meno che non sia un po 'di chiave esterna per distinguere tra diverse installazioni).

Personalmente mi piace la versatilità di SQL e avere cose autosufficiente. Utilizzando il database non aggiunge alcuna complessità che non è già presente (si otterrà lo stesso livello di caching per libero, per esempio, quando si sarebbe dovuto crescere il proprio cache XML se le prestazioni sono un problema). Avrei scelto XML solo se i valori avevano una struttura molto complessa che renderebbe la manipolazione tramite SQL ingombrante.

Non sono sicuro che il motivo per cui pensi di aver bisogno di "codificare un sacco di valori" e in particolare il motivo per cui non ci sarebbe più hardcoding con una soluzione di database che con una soluzione di file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top