将控制器/模型/基本上所有内容添加到自己的命名空间有啥好处?
Posted
技术标签:
【中文标题】将控制器/模型/基本上所有内容添加到自己的命名空间有啥好处?【英文标题】:What benefits would adding controllers/models/basically everything to their own namespace have?将控制器/模型/基本上所有内容添加到自己的命名空间有什么好处? 【发布时间】:2014-08-31 23:19:15 【问题描述】:我工作的公司要求我们开发的应用程序 (Laravel) 将控制器/模型/存储库/验证器添加到他们自己的命名空间 (\Company\Whatever)。我这样做没有问题,但我很好奇这样做有什么好处。
我认为要做到这一点,我只需自动加载一个自定义名称空间 (app/Company/Whatever) 并在其下创建一个新的控制器/模型/whatnot 目录结构。
【问题讨论】:
这个问题可能会被关闭(不适合这个站点),但是命名空间有一些好处: 更少/没有名称冲突:每个命名空间可以有一个自定义的扩展LogicException
,由指定的处理程序处理。有组织的代码 == 可维护的代码。命名空间强制您的项目文件以一致的方式存储。更简单的测试,更好的 IDE 自动完成和警告。在命名空间项目中,每个类都以一系列use Some\Namespace\Class
语句开头:一看就知道类的依赖关系是什么
命名空间,至少在 php 中,不如在 C++ 等语言中强大/有用,但随着项目的发展,它们很重要。回想一下在命名空间之前的那些日子,类被称为LibName_Service_Connection_Base
,现在我们写Base
,如果我们在同一个命名空间中,或者use LibName\Service\Connection\Base;
一次,并在整个代码中使用Base
。 . 不要低估懒惰,这是一个因素
@EliasVanOotegem 任何特定的 SE 网站,这将是一个很好的询问?
webapplications 可能,但programmers 上已经有一些与 napespace 相关的问题:programmers.stackexchange.com/questions/221524/… 似乎为您回答了这个问题,投票结束
不太合适,question exists on programmers
【参考方案1】:
这样做有一些好处。
1.) PSR-0/PSR-4 自动加载
如果您有供应商命名空间,那么您可以使用 PSR-0 或 PSR-4,这使得自动加载非常容易。你可以把它放在你的composer.json
:
"autoload":
"psr-4":
"App\\": "app/src/"
,
2.) 避免碰撞
理论上你的代码应该可以占用全局命名空间,因为其他所有东西应该都在它自己的命名空间中,但这是 PHP 并且 a) PHP 本身不使用任何核心类的命名空间 b) 并不是每个人都在命名空间下分发他们的代码。 2014 年的情况比 2010 年要好得多很多,但这仍然是一个潜在的问题。
可能还有其他一些原因,但这两个是为我做的。
【讨论】:
以上是关于将控制器/模型/基本上所有内容添加到自己的命名空间有啥好处?的主要内容,如果未能解决你的问题,请参考以下文章