这被认为是对作曲家的误用吗?

时间:2014-03-12 07:23:22

标签: php composer-php

在项目的根目录下给出以下目录:

  • app /,静态资源和类映射项目代码的组合
  • src /,配置为加载命名空间的PHP代码
  • vendor /,由composer.json管理的包

无论我碰巧使用什么框架,将src目录用于可在项目之外使用的可移植代码是正确的,还是{{1}的角色目录?

对于要共享的代码使用vendor目录可能会出现任何问题吗?

2 个答案:

答案 0 :(得分:1)

这似乎是一种合理的设计方法。 Composer允许您通过将自己的类自动加载到目录中然后在composer.json中引用它来实现此目的。请参阅此问题,了解如何:Using Composer's Autoload

但是,这不会处理src /下代码的版本控制。如果你要单独发布这个,那么可能值得学习how to make your library installable through Composer,一旦你把它检查到某个地方的Git仓库,就像这样引用它:

"require": {
    "me/testlib": "1.0.*"
}
"repositories": [
    {
        "type": "vcs",
        "url": "https://github.com/username/hello-world"
    }
]

当然,那么你将为多个源树提供维护,一个用于你的项目,一个用于每个库,但这是一件好事吗? (“关注点分离”。)

答案 1 :(得分:0)

在一般情况下,您的方法看似有效。

如果数据量app或其他任何地方超过src中可用代码的数量,它将无效。换句话说:如果您只在src中托管一个共享类,并且app中的一千兆字节资产不是该类所需的,那么将它设为库是愚蠢的

但在这种情况下,将该类简单地移动到其自己的作曲家库中并再次包含它将很容易。由于自动加载,类仍将存在(尽管文件改变了它的位置)并且可以在其他代码中使用。任何需要大量资产的任何其他软件即使移动了该类,也将继续工作。

将代码移动到库中时,可能值得考虑通常更小的更好,但是太小则没有价值。你不想require它自己的每一堂课 - 但是一个合理的课程集合使用相同的主题是一个很好的候选人。