0

我正在更新我们的 CMS,我遇到了一种情况,我不知道该采用哪种解决方案。基本上,我们的每个客户都将他们网站的内容保存在他们自己的数据库中。这包括内容、调查、访问者使用的搜索词、菜单结构等。

我们客户网站上的很多内容都是动态的,他们可以通过 CMS 进行更改。所有这些数据都保存在我设计的关系数据库中,但我在一些情况下运行,将这些首选项保存在表中会有点过分。

例如,CMS 允许他们向收件人列表发送电子邮件。他们可以选择使用我们的服务器,也可以安装自己的 smtp 服务器。但是,在这种情况下,创建一个包含“mailService”列的表并让它保存特定值会有点矫枉过正,因为该表只能保存一行。

以下是我通过在此网站和/或谷歌上搜索后得出的一些想法,但我不太确定它们的优缺点是什么:

  • 基本上像我上面提到的那样将所有偏好保存在一个表格中,这是我想避免的。
  • 将所有这些“单一”首选项保存在一个 XML 文件中,当他们更改设置时我会对其进行修改。
  • 有一个名为 preferences 的表,其中包含以下列:id、preferenceName、value。每次我有一个新的偏好时,我都会添加、修改或删除它(我不喜欢这个选项,因为我觉得我必须硬编码太多的值......至少从方式我正在看到实施)

我有点倾向于 XML 的想法,但我想从 Stackoverflow 的优秀社区那里得到一些反馈:) 也许使用 XML 是一个可怕的想法,原因是我完全忽略了,或者有一个笨蛋- 你为什么不做这个解决方案。感谢您的任何意见!

4

3 回答 3

2

如果您已经拥有一个数据库表,我会说使用一个数据库表,并将设置的名称分成合理的类别:

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

除此之外,为了可读性,我更喜欢yaml而不是 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

Symfony YAML 类是一个很好的独立库,可以将该文件解析为 PHP 数组。

您也可以使用一个简单的 PHP 文件。

$settings = array(
 "mail_service:recipients" => " .... ",
 "mail_service:sender" => " .... ",    
 "mail_service:smtp:hostname" => " .... ",
 "mail_service:smtp:username" => " .... ",
 "mail_service:smtp:password" => " .... ");
于 2010-07-05T18:45:08.280 回答
1

xml 路由运行良好,因为它可以轻松地添加新的属性并允许对属性进行分组。缺点是无法使用 SQL 迁移或更新首选项数据。它必须以编程方式完成。如果需要,您也不能查询单个属性的首选项。

总而言之,如果您要维护少量首选项,而无需通过 SQL 查询或更新它们,那么 xml 将非常适合您。否则,数据库中的名称、值对表将是更好的选择。

于 2010-07-05T18:40:49.383 回答
1

我会使用 XML 文件(尽管它不需要是 XML——如果它是 Java,我会使用属性文件,直到找到不这样做的理由)或单个键/值表(id 字段不除非它是一些用于区分不同安装的外键,否则不会为您带来太多好处)。

就我个人而言,我喜欢 SQL 的多功能性和独立的东西。使用数据库不会增加任何不存在的复杂性(您将免费获得相同级别的缓存,例如,如果性能是一个问题,您必须增加自己的 XML 缓存)。仅当值具有非常复杂的结构而使通过 SQL 进行操作变得繁琐时,我才会选择 XML。

我不确定你为什么认为你需要“硬编码很多值”,特别是为什么使用数据库解决方案比使用文件解决方案硬编码更多。

于 2010-07-05T18:48:25.627 回答