将控制器/模型/基本上所有内容添加到自己的命名空间有啥好处?

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 年要好得多很多,但这仍然是一个潜在的问题。

可能还有其他一些原因,但这两个是为我做的。

【讨论】:

以上是关于将控制器/模型/基本上所有内容添加到自己的命名空间有啥好处?的主要内容,如果未能解决你的问题,请参考以下文章

如何避免 Rails 脚手架将模型放入命名空间

将表单放入命名空间会导致MissingManifestResourceException

将命名空间添加到根元素

如何将命名空间添加到我的 T4 脚手架?

.Net 核心版本控制:文件夹结构/命名空间

如何将自定义视图+控制器添加到模型?