为什么CakePHP使用不同的复数/单数命名规则?

4
有人能解释一下为什么CakePHP惯例是在数据库表和控制器中使用复数名称,而在模型中使用单数名称吗?为什么不总是使用单数或总是使用复数?
对我来说,这似乎很令人困惑,总是要想“现在我在这里使用复数还是单数?”(还是有一个容易记住的方法吗?)然后你有使用两者组合的连接表!
我假设有一个好的理由,但只是没有遇到过它(我真的希望不是因为Ruby-on-Rails以那种方式工作)。

2
很可能是因为 Ruby on Rails :) - Tomas Markauskas
1
我不知道。我们总是使用“name”、“table”和“primaryKey”可选字段(请参阅模型文档)来按我们想要的方式命名事物。我们在想要的时候将其大写,保持单数形式。除此之外,我真的很喜欢Cake。 - nilamo
这也可能是因为CakePHP是由使用PHP的人设计的,而PHP本身在定义上就是不一致的。 - Noah Goodrich
nilamo:好主意。也许我应该按照自己的想法命名东西。;-) - Simon East
Noah:我认为PHP继承了一些不一致性,因为不同的库以不同的命名约定添加到基础中。CakePHP似乎从一开始就是这样设计的(RoR也是!),但我真的不明白为什么要这样做。 - Simon East
2个回答

10

CakePHP约定

CakePHP的约定基于多年的Web开发经验和最佳实践而产生。虽然我们建议您在使用CakePHP进行开发时遵循这些约定,但我们应该提到,许多这些原则是可以轻松覆盖的——尤其是在处理遗留系统时非常方便。

我认为这个想法是使阅读更加流畅,并以正确的方式考虑元素。数据库表总是复数形式,因为它们包含许多记录。模型是单数形式,因为你应该考虑使用它找到单个记录。对于model_id的选择字段将自动从$models获取其选项,因为您正在选择其中的一个。

$model = $this->Model->find('first');  // reads like English
$model = $this->Models->find('first'); // slightly trips you up

$models = $this->Model->find('all');   // works okay
$models = $this->Models->find('all');  // more logical, but "this models" still trips

虽然不是完美的,但我认为一旦你习惯了它,这是一个非常好的约定。不过,在开始时可能会让人感到困惑。


2
同意。模型是您的数据模式的抽象,而在英语中,它们始终是单数(您不会说“汽车的精髓是什么”)。控制器处理抽象的多个实例(它将它们全部操纵)。在我看来,这与我们在英语中做事情的方式非常一致。 - Travis Leleu

4

有没有简单的方法来记住这些规则?

是的,关于命名规范要求的那些部分(db/model/controller)...如果不是模型的名称(例如:User)或外键的名称(例如:user_id),那么它就是复数形式。除了这两个东西,其余所有内容基本上都是复数形式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接