代码之家  ›  专栏  ›  技术社区  ›  Gazillion

关于如何保持网站偏好的不同选项?

  •  0
  • Gazillion  · 技术社区  · 15 年前

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

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

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

    以下是我在这个网站和/或谷歌上搜索到的一些想法,但我不太确定它们的优缺点:

    • 基本上把所有的偏好都放在上面提到的表格中,这是我想要避免的。
    • 将所有这些“单一”首选项保存在一个XML文件中,我将在它们更改设置时修改该文件。
    • 有一个名为preferences的表,其列如下:id、preferencename、value。每次我有一个新的首选项,我只需要添加、修改或删除它(我不喜欢这个选项,因为我觉得我必须硬编码太多的值…至少从我对实现的看法来看)

    我有点倾向于XML的想法,但是我想从StackOverflow的优秀社区那里得到一些反馈:)也许使用XML是一个可怕的想法,因为我完全忽视了一个原因,或者有一个你的愚蠢的为什么不——你只是做——这个解决方案。谢谢你的意见!

    3 回复  |  直到 15 年前
        1
  •  1
  •   btreat    15 年前

    XML路由在某种意义上工作得很好,它可以轻松地添加新的属性,并允许对属性进行分组。缺点是不可能使用SQL迁移或更新首选项数据。这必须通过程序来完成。如果需要,也不能查询单个属性的首选项。

    总而言之,如果您维护少量的首选项,而这些首选项不需要通过SQL查询或更新它们,那么XML就可以很好地为您服务。否则,数据库中的名称、值对表将是更好的方法。

        2
  •  2
  •   Unicron    15 年前

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

    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 class 是一个将该文件解析为PHP数组的优秀独立库。

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

    $settings = array(
     "mail_service:recipients" => " .... ",
     "mail_service:sender" => " .... ",    
     "mail_service:smtp:hostname" => " .... ",
     "mail_service:smtp:username" => " .... ",
     "mail_service:smtp:password" => " .... ");
    
        3
  •  1
  •   Mark Peters    15 年前

    我将使用XML文件(虽然它不需要是XML)——如果它是Java,我会使用属性文件直到找到一个不适用的原因)或单个键/值表(ID字段不会获得很多,除非它是一些外键来区分不同的安装)。

    就我个人而言,我喜欢SQL的多功能性,并且拥有独立的东西。使用数据库并不会增加任何不存在的复杂性(例如,如果性能存在问题,您将不得不增长自己的XML缓存,那么您将免费获得相同级别的缓存)。只有当值具有非常复杂的结构时,我才会选择XML,这会使通过SQL进行操作变得很麻烦。

    我不知道为什么你认为你需要“硬编码大量的值”,特别是为什么会有更多的硬编码与数据库解决方案比与文件解决方案。

    推荐文章