如何避免魔术字符串(PHP MVC框架)

时间:2012-01-02 15:37:39

标签: php cakephp cakephp-appmodel magic-string

我希望将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'中的一个拼写错误,它将无法正常工作。这里没有智能感知/代码完成帮助!

另外,如果我想将'Recipe'重新整合到别的东西怎么办?我必须手动搜索所有代码,并找出它是常规文本还是其他魔术字符串。

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

关于如何避免魔术弦的任何链接(至少尽可能多)......?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

答案 2 :(得分:0)

我看到你在那里做了什么

  

此外,如果我想重新'食谱'...

该怎么办?

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

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

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