【问题标题】:Large Configuration for class, implementation suggestions类的大配置,实施建议
【发布时间】:2011-05-23 14:58:51
【问题描述】:

所以我有一个大类,我正在重构它以使其更灵活。

一个 INI 文件中有超过 100 个可配置的属性(变量)。有些是开发设置,有些是生产设置。

目前我使用环境标志来提取我需要的 INI 设置(开发或产品)。

所有 INI 字段都是必需的,必须设置。 (目前为此使用设置器)。

那么什么更有意义?

  • 答:保持当前设置
  • B:移至其他类型的配置设置(如 xml 或其他)
  • C:将所有设置移动到脚本本身并删除 INI 解析和验证代码(设置器)
  • D:建议?

额外问题:

我在周末读到这篇文章:http://berryllium.nl/2011/02/getters-and-setters-evil-or-necessary-evil/ 并想知道我如何才能更多地遵循这种类型的开发风格,但对如何不使用 getter/setter 功能来设置必填字段感到困惑?我了解 getter/setter 的必要性,并想知道我是否正确实施它们?

我将 INI 用于数据库设置、验证限制(认为支出限制为 100 美元,但可能会改变)、大型数组(静态值,如美国 50 个州,但也可以添加美国领土)

【问题讨论】:

  • C,因为为什么要把时间和精力浪费在一个简单的 PHP 配置文件上
  • @Robus 所以你是说放弃 INI 文件并移动类本身的所有设置?

标签: php optimization configuration refactoring ini


【解决方案1】:
  • 如果要保留设置 可读,保持当前设置或 将设置移动到 PHP 脚本中(但做 不要将它们硬编码到类中)。
  • 如果 你想提高性能 - 使用 JSON 格式或 PHP 脚本 - json_decode 工作速度更快,PHP 脚本 工作速度更快,可以轻松缓存 由 APC 提供。
  • 作为变体,您可以解析 设置文件一次并把所有 缓存中的设置(APC 或 memcache)。

还有。我认为没有人在乎,但我对 getter 和 setter 有自己的看法 :)
Getter 和 Setter 并不邪恶。封装的思想不仅仅是隐藏字段,而是隐藏类的工作方式。 Getter 和 setter 可以在接口中声明,因此您可以用另一个对象替换一个对象 - 这就是封装的发明!

让我们以 Berry Langerak 的文章为例 - withdrawdeposit 它是二传手。所有这些代码都可以在setBalance 方法中成功完成,几乎不会有任何改变。所有这些检查、比较——这是二传手通常的工作。

为什么公共领域是邪恶的?因为对象不能控制它们的变化,也因为它们不能在接口中声明。 Getter 和 setter 都可以做到,是 OOP 的完美工具。

当然,访问器可以写得很傻,但这并不意味着它们是邪恶的。类中的任何方法都可以写傻。

【讨论】:

    【解决方案2】:

    有趣的问题。

    我非常怀疑所有这些变量在您的开发区域和生产区域之间是否/可能不同。并非您在调试时可能更改的每个变量都必须存储在配置文件中。

    我建议对大多数变量使用常量。 你有自动完成,大量的 IDE 选项,而且很容易编辑。更不用说将它们分成不同的文件然后解析大量的 ini 更符合逻辑。

    【讨论】:

    • 我以前使用过常量,但决定不使用它,因为项目需要非常可配置,我不想接触代码,而是接触 INI 文件。至于开发/产品是否相同,我非常不同意。我使用了几个数据库连接,每个都有一个生产和一个开发服务器以及生产和开发电子邮件别名、调试级别、日志级别等......这个列表还在继续。但是,我确实有一个通用或共享的 INI,其中这些值在 prod 和 dev 中是相同的
    • 必须打开一个 .ini 文件并打开正确的常量文件有什么更可配置的?除了您没有获得任何 IDE 功能,无法轻松拆分它们并且必须将它们放在您的公共目录之外,我没有看到太大的区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多