【问题标题】:How do I avoid magic strings (PHP MVC Frameworks) [closed]如何避免魔术字符串(PHP MVC 框架)[关闭]
【发布时间】:2012-01-02 15:37:38
【问题描述】:

我想将 MVC 框架与 PHP 一起使用,以便很好地分离代码和表示。我目前已经开始研究 CakePHP。看起来不错,但是那些魔线呢?

看看下面的代码(摘自 CakePHP 食谱):

class User extends AppModel {
    var $name = 'User';
    var $hasOne = 'Profile';
    var $hasMany = array(
        'Recipe' => array(
            'className'  => 'Recipe',
            'conditions' => array('Recipe.approved' => '1'),
            'order'      => 'Recipe.created DESC'
        )
    );
}

那些神奇的字符串让我很困扰。代码中的字符串应该只是要输出的文本!

“Recipe.created DESC”中有一个拼写错误,它不会按预期工作。这里没有智能感知/代码完成来提供帮助!

另外,如果我想将“食谱”重命名为其他内容怎么办?我必须手动搜索所有代码并找出它是常规文本还是魔术字符串之一。

其他 PHP MVC 框架更好吗? (阅读:更少或没有魔术字符串)

关于如何避免魔法字符串(至少尽可能)的任何链接...?

【问题讨论】:

    标签: php cakephp cakephp-model magic-string


    【解决方案1】:

    Cake 遵循“约定优于配置”的方法。它是一个框架,可用于快速原型化和部署(主要是)基于 CRUD 的应用程序。它在幕后发生了很多“魔法”,如果你不知道幕后发生了什么,这并不总是一个好的选择。

    至于你的具体例子,还不错。配方实际上是指与User 模型相关的Recipe 模型。 Cake 有一个内置的 ORM,它使用一些模型变量来正确设置模型关系。我想说,在任何 ORM 框架中都是如此。除非您更改了类名,否则您不需要更改所有引用,这在任何 PHP 代码中都是如此。

    关于其他框架建议。我建议您在开始使用框架之前使用自己的 PHP MVC 堆栈。如果您对 PHP 有一定的了解,可以查看 CodeIgniterKohona 框架。这些没有蛋糕那么严格。你也可以看看Zend Framework。还有许多其他具有不同功能的框架(或多或少提供不同的控制变化),您需要做的就是环顾四周。

    【讨论】:

    • 很好的解释,尤其是对于这个问题。不过说真的,CakePHP 是一个不错的框架——Rails 约定优于配置的设置没有任何问题。如果您提前计划好应用程序的设计(如您所愿),您将不会遇到任何麻烦。此外,如果您在“魔术字符串”中打错字会引发错误……就像拼错控制结构会引发错误一样。
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      我知道你在那里做了什么

      另外,如果我想remane“配方”...

      无论您选择哪个 ORM 库,总会有魔术字符串。只是没有足够的信息来自动将您的类映射到数据库表(最简单的情况除外)。魔术字符串实际上是 ORM 创建映射所需的元数据。

      您可以尝试通过定义常量或创建公共静态字段来避免使用魔术字符串,但最终您最多只能将它们合并到一个文件中。

      在使用 ORM 时,无论如何您都必须提供元数据。考虑到这一点,您应该选择让您感觉最舒适的 ORM。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-21
        • 1970-01-01
        • 1970-01-01
        • 2011-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多