Pregunta

Estoy en el proceso de renovación de nuestro CMS y me he encontrado con una situación que no sé cuál es la solución a adoptar. Básicamente, cada uno de nuestros clientes alberga el contenido de su página web en su propia base de datos. Esto incluye el contenido, las encuestas, las palabras utilizadas por los visitantes, menú, etc strucutre búsqueda.

Una gran parte del contenido en los sitios web de nuestros clientes es dinámica y puede cambiar a través de la CMS. Toda esta información se guarda en una base de datos relacional que he diseñado, pero estoy corriendo en unas pocas situaciones en las que la celebración de estas preferencias en una mesa sería una exageración.

Por ejemplo, el CMS les permite enviar mensajes de correo electrónico a una lista de destinatarios. Se puede optar por utilizar nuestro servidor o que pueden poner en su propio servidor SMTP. Sin embargo, en este caso sería un poco exagerado para crear una tabla con una columna para "MailService" y tienen que contener valores específicos ya que la tabla sólo se llevaría a cabo una fila.

Estas son las pocas ideas que yo he llegado con un poco mediante la búsqueda en este sitio y / o Google, pero no estoy muy seguro de cuáles son sus ventajas y desventajas son:

  • Básicamente mantener todas las preferencias en una tabla como he mencionado anteriormente, algo que me gustaría evitar.
  • sostener todas estas preferencias "single" en un archivo XML, que me gustaría modificar cuando cambian sus ajustes.
  • una tabla llamada preferencias con lo siguiente: Identificación del columsn, preferenceName, valor. Cada vez que tendría una nueva preferencia que acababa de añadir, modificarlo o eliminarlo (no me gusta esta opción porque siento que tendría que codificar demasiados valores ... al menos desde el camino estoy viendo la implementación)

Soy un poco inclinado hacia la idea de XML, pero me gustaría obtener alguna información de la buena comunidad aquí en StackOverflow :) Tal vez el uso de XML sería una idea horrible para una razón por la que he pasado por alto por completo o hay una tu-mudo-qué-no-te-acaba-do-esta solución. Gracias por cualquier entrada!

¿Fue útil?

Solución

La ruta XML funciona bien en el sentido de que permite fácilmente nuevos attriutes a ser añadidos y permite atributos a agruparse. La desventaja es que es imposible migrar o actualizar los datos de preferencia utilizando SQL. Tiene que ser hecho mediante programación. También puede no Si surge la necesidad de consulta preferencias para los atributos individuales.

Todo para decir, si usted está manteniendo un pequeño número de preferencias donde no hay necesidad de consulta o actualizarlos a través de SQL, XML que funcionan bien para usted. De lo contrario, la tabla de pares nombre, el valor en la base de datos sería un mejor camino a seguir.

Otros consejos

Yo diría tabla de base de un solo uso si ya tiene eso, y dividir los nombres de la configuración en categorías sensibles:

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

Aparte de eso, me gusta mucho más yaml a XML para el bien de la legibilidad. Es como XML, pero sin todo el desorden.

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

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

El clase Symfony YAML es una biblioteca independiente para analizar bien ese archivo en un PHP matriz.

También podría utilizar un simple script.

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

Me gustaría ir con el archivo XML (aunque no tiene por qué ser XML - si se tratara de Java que haría uso de un archivo de propiedades hasta que encontré una razón para no hacerlo) o una tabla de clave única / valor (el Identificación del campo no le gana mucho menos que sea alguna clave externa de diferenciar entre diferentes instalaciones).

En lo personal me gusta la versatilidad de SQL y que tienen cosas autocontenido. Utilizando la base de datos no añade ninguna complejidad que no está ya allí (obtendrá el mismo nivel de almacenamiento en caché de forma gratuita, por ejemplo, cuando se tendría que hacer crecer su propia caché XML si el rendimiento es un problema). Yo elegiría XML sólo si los valores tenían una estructura muy compleja que haría que la manipulación a través de SQL engorroso.

No estoy seguro de por qué cree que es necesario "codificar una gran cantidad de valores" y específicamente por qué no habría más hardcoding con una solución de base de datos que con una solución de archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top