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

Php 这被认为是对作曲家的滥用吗?,php,composer-php,Php,Composer Php,给定项目根目录中的以下目录: app/,是静态资源和类映射项目代码的组合 src/,配置为加载命名空间的PHP代码 供应商/,由composer.json管理的包 无论我使用的是什么框架,使用src目录来获取项目外可用的可移植代码是否正确,或者这是供应商目录的作用 对于要共享的代码,使用src目录是否会产生任何问题?这似乎是一种合理的设计方法。Composer允许您通过将自己的类自动加载到目录中,然后在Composer.json中引用它来实现这一点。请参见此问题了解如何: 但是,这不会处理s

给定项目根目录中的以下目录:

  • app/,是静态资源和类映射项目代码的组合
  • src/,配置为加载命名空间的PHP代码
  • 供应商/,由composer.json管理的包
无论我使用的是什么框架,使用
src
目录来获取项目外可用的可移植代码是否正确,或者这是
供应商
目录的作用


对于要共享的代码,使用
src
目录是否会产生任何问题?

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

但是,这不会处理src/下代码的版本控制。如果您打算单独发布此内容,可能值得学习,一旦您将其签入某个Git回购协议,请参考以下内容:

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

当然,然后您将维护多个源代码树,一个用于您的项目,一个用于每个库,但这是一件好事,对吗?(“关注点分离”)

在一般情况下,您的方法看起来是有效的

但是,如果
app
或其他任何地方的数据量超过
src
中的可用代码量,则该命令将无效。换句话说:如果你在
src
中只托管了大约一个共享类,而在
app
中托管了该类不需要的1GB资产,那么将其作为库将是愚蠢的

但在这种情况下,只需将该类单独移动到composer库中并再次包含它就很容易了。由于自动加载,该类仍然存在(尽管文件更改了它的位置),并且可以在其他代码中使用。任何其他需要全部资产的软件都将继续工作,即使该类被移动


在将代码移动到库中时,可能需要考虑较小的代码通常更好,但太小的代码则毫无价值。你不想
要求每个类都独立运行,但是一个主题相同的类的合理集合是一个很好的选择。

因此,尽管目录结构本身很好,您不会建议将可移植的代码放在
供应商
之外?
供应商
是composer安装东西的地方。不要把你自己的东西放在那里,除非你是按照我的建议通过作曲家从回购中得到的。我不确定我是否理解你的问题,但我认为一个合适的答案是“我建议不要将你自己的库与你的程序放在同一个源代码树中”。是的,我所说的“将代码放在供应商中”将是“编写包”的同义词。您建议
src/
目录仍然是项目级别的,并且特定于整个解决方案:开发人员不会计划在项目之间手动复制整个目录以进行代码重用,相反,他们应该只为
供应商制作一个包
?而src/目录显然不是放置代码的正确位置,不能跨页面使用,对吗?你可以将代码放在任何你喜欢的地方,事实上,
src
是许多库的常见选择,以及它旁边的
测试。我不明白为什么这会不好——我自己也在使用它。这似乎是一种误用,因为composer将vendor/指定为管理外部依赖关系的目录。任何其他目录都应该是特定于项目的。
供应商
是Composer放置其他代码的地方,而不是您的
src
是一个地方,通过定义一个
composer.json
文件来允许自动加载和包含代码,您可以在这里放置代码并使其可供其他人使用。因此,如果您询问的项目在其他地方使用,那么代码才会与您的项目依赖项一起位于
vendor
文件夹中(现在将位于您自己的
vendor
文件夹中)。我想说的是,如果您有一个项目,其中包含一些您想要共享的代码,而且里面无用的数据量很低,你已经有了你想要包含在其他地方的项目——只要通过Composer让它可以包含就行了。