Design patterns 关于如何保持网站的不同选项';谁的偏好?
我正在更新我们的CMS,我遇到了一个我不知道该采用哪种解决方案的情况。基本上,我们的每个客户都在自己的数据库中存储他们网站的内容。这包括内容、调查、访问者使用的搜索词、菜单结构等 我们客户网站上的许多内容都是动态的,他们可以通过CMS进行更改。所有这些数据都保存在我设计的关系数据库中,但我在一些情况下运行,在表中保存这些首选项会有点过头 例如,CMS允许他们向收件人列表发送电子邮件。他们可以选择使用我们的服务器,也可以安装自己的smtp服务器。但是,在这种情况下,创建一个包含“mailService”列的表并让它保存特定值会有点过分,因为该表只保存一行 以下是我在本网站和/或谷歌上搜索后得出的一些想法,但我不太确定它们的利弊:Design patterns 关于如何保持网站的不同选项';谁的偏好?,design-patterns,content-management-system,user-preferences,Design Patterns,Content Management System,User Preferences,我正在更新我们的CMS,我遇到了一个我不知道该采用哪种解决方案的情况。基本上,我们的每个客户都在自己的数据库中存储他们网站的内容。这包括内容、调查、访问者使用的搜索词、菜单结构等 我们客户网站上的许多内容都是动态的,他们可以通过CMS进行更改。所有这些数据都保存在我设计的关系数据库中,但我在一些情况下运行,在表中保存这些首选项会有点过头 例如,CMS允许他们向收件人列表发送电子邮件。他们可以选择使用我们的服务器,也可以安装自己的smtp服务器。但是,在这种情况下,创建一个包含“mailServi
- 基本上把所有的偏好都放在一个表中,就像我上面提到的,这是我想要避免的
- 将所有这些“单一”首选项保存在一个XML文件中,当它们更改设置时,我会修改该文件
- 有一个名为preferences的表,其列号如下:id、preferenceName、value。每次我有一个新的首选项时,我都会添加、修改或删除它(我不喜欢这个选项,因为我觉得我必须硬编码太多的值…至少从我看到的实现方式来看)
我有点倾向于XML的想法,但我想从Stackoverflow这里的好社区得到一些反馈:)也许使用XML会是一个可怕的想法,因为我完全忽略了一个原因,或者有一个“你为什么不——你——只是——做这个解决方案”的问题。谢谢你的意见 xml路由工作得很好,因为它可以轻松地添加新属性并对属性进行分组。缺点是无法使用SQL迁移或更新首选项数据。必须按程序进行。如果需要,也不能查询单个属性的首选项
总而言之,如果您维护少量的首选项,而不需要通过SQL查询或更新它们,那么xml将非常适合您。否则,数据库中的名称、值对表将是一种更好的方法。xml路由工作良好,因为它可以轻松地添加新属性并对属性进行分组。缺点是无法使用SQL迁移或更新首选项数据。必须按程序进行。如果需要,也不能查询单个属性的首选项
总而言之,如果您维护少量的首选项,而不需要通过SQL查询或更新它们,那么xml将非常适合您。否则,数据库中的名称、值对表将是一种更好的方法。如果您已经有了一个数据库表,我会说使用一个数据库表,并将设置的名称分成合理的类别:
mail_service:recipients
mail_service:sender
mail_service:smtp:hostname
mail_service:smtp:username
mail_service:smtp:password
除此之外,为了可读性,我更喜欢XML。它类似于XML,但没有所有的混乱
mail_service:
recipients:
- recipient1@domain.com
- recipient2@domain.com
- recipient3@domain.com
- recipient4@domain.com
visuals:
header:
text_color: #BBCCDD
background_color: #FFFFFF
是一个很好的独立库,可以将该文件解析为PHP数组
您还可以使用一个简单的PHP文件
$settings = array(
"mail_service:recipients" => " .... ",
"mail_service:sender" => " .... ",
"mail_service:smtp:hostname" => " .... ",
"mail_service:smtp:username" => " .... ",
"mail_service:smtp:password" => " .... ");
如果您已经有了一个数据库表,我会说使用一个数据库表,并将设置的名称分为合理的类别:
mail_service:recipients
mail_service:sender
mail_service:smtp:hostname
mail_service:smtp:username
mail_service:smtp:password
除此之外,为了可读性,我更喜欢XML。它类似于XML,但没有所有的混乱
mail_service:
recipients:
- recipient1@domain.com
- recipient2@domain.com
- recipient3@domain.com
- recipient4@domain.com
visuals:
header:
text_color: #BBCCDD
background_color: #FFFFFF
是一个很好的独立库,可以将该文件解析为PHP数组
您还可以使用一个简单的PHP文件
$settings = array(
"mail_service:recipients" => " .... ",
"mail_service:sender" => " .... ",
"mail_service:smtp:hostname" => " .... ",
"mail_service:smtp:username" => " .... ",
"mail_service:smtp:password" => " .... ");
我会使用XML文件(虽然它不需要是XML——如果它是Java,我会使用属性文件,直到找到不使用的理由)或单个键/值表(id字段不会给您带来太多好处,除非它是区分不同安装的外键) 就我个人而言,我喜欢SQL的多功能性和自包含性。使用数据库不会增加任何不存在的复杂性(例如,如果性能有问题,您将不得不增加自己的XML缓存,您将免费获得相同级别的缓存)。只有当值的结构非常复杂,使得通过SQL进行操作非常麻烦时,我才会选择XML
我不确定您为什么认为需要“对很多值进行硬编码”,特别是为什么数据库解决方案比文件解决方案有更多的硬编码。我会选择XML文件(尽管它不需要是XML——如果它是Java,我会使用属性文件,直到找到不这样做的理由)或单个键/值表(id字段不会给您带来太多好处,除非它是一些外键,用于区分不同的安装) 就我个人而言,我喜欢SQL的多功能性和自包含性。使用数据库不会增加任何现有的复杂性(例如,如果性能有问题,您将不得不增加自己的XML缓存,您将免费获得相同级别的缓存)只有当值的结构非常复杂,使得通过SQL进行操作非常麻烦时,我才会选择XML
我不知道你为什么认为你需要“硬编码很多值”特别是为什么数据库解决方案比文件解决方案有更多的硬编码。+1用于确定它不应该是数据库…或XML。有很多文件格式,XML并不总是最佳选择。特别是对于键/值映射。感谢您提供的信息。我从未听说过YAML which是我首先在这里问这个问题的原因。+1用于确定它不应该是数据库…或XML。有很多文件格式,XML并不总是最佳选择。特别是