PHP中命名空间中使用的是Controller还是Controllers,Model还是Models?

9
例如,Symfony使用\Controller。Yii2使用\controllers\models
有关...s|es的标准像PSR这样吗?

1
我曾经在一段时间前寻找这个信息,偶然发现了一个答案(我没有链接),它说:如果容器中包含的所有元素都是完全相同类型的,请使用“s”命名。例如,如果里面的所有类都是异常,则使用Exceptions。如果里面的东西是“相关的”,则使用单数,例如,如果里面既有MyNiceException又有ExceptionFactory,请使用Exception。自从几年前我使用了这个指南,我感到很舒适。这远非标准,但可以提高可读性。 - Xavi Montero
相反,我不更改框架的默认设置。例如,在Symfony中,我不强制使用“控制器”,我只是保持“控制器”以避免破坏任何东西。我仅在我自己创建的命名空间中执行此操作。对于“模型”,我特别使用单数形式,因为我有实体、存储库、编写器、读取器、服务等等... 我的项目中没有200个“模型”,而是“一个模型”内含有“许多内容”。 - Xavi Montero
这个回答 https://softwareengineering.stackexchange.com/a/75929/150005 似乎加强了这个理论。 - Xavi Montero
1个回答

13

PSR标准中没有规定在命名空间中使用单数还是复数,这通常由框架约定。同样的,大小写也是如此。

在选择的框架中是否可以使用您喜欢的命名约定(如果有)大多取决于框架本身,并且甚至可能在框架的不同部分之间有所不同。Symfony默认为单数 App\Controller,但只要路由配置使用正确的名称,就可以很容易地更改为App\ControllersApp\controllers等您喜欢的名称。

当偏离框架约定时,您可能会遇到问题,因为它会对配置应用程序的期望产生影响。例如,Symfony 3将您的命令自动加载到Command/文件夹中,并在类名后缀中加上Command。当您偏离此约定时,您必须手动注册它们。另一方面,Symfony 4在服务配置中使用新的autiwiringautoconfigure默认值,并根据它们是否实现了正确接口(直接或通过扩展基础Command类间接实现)来检测命令,因此可以具有任何您喜欢的名称并可以放置在任何文件夹中。所以即使在框架内或不同版本之间,将名称更改为建议之外的其他名称可能会产生不同的影响。


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