6

先介绍一下背景

我们公司是一家只有四名开发人员的小型初创公司,正在开始将我们的产品重构为可重用的模块,以简化开发过程,提高生产力,并且在此过程中,我们希望在合适的地方引入单元测试。

与小型初创公司一样,我们不能浪费太多的开发时间,但正如我们所见,这对于我们的中长期业务成功极为重要。

目前,我们有两种终端用户产品。两者都是建立在我们自己内部业务层之上的 Laravel (PHP) 应用程序,主要由 web 服务、restful api 和一个庞大的数据库组成。

该业务层为这些产品提供了大部分数据,但每个产品的使用方式完全不同。我们计划在不久的将来构建其他产品,除了维护和改进这两个几乎完成的产品。

为此,我们打算将这些(以及未来)产品的通用逻辑抽象为可重用和解耦的模块。显而易见的选择似乎是 Composer,即使我们对此知之甚少。

现在到真正的问题

我想就如何以测试驱动的方式开发内部包询问其他意见。每个模块应该是一个带有自己的单元测试并需要它的依赖项的 composer 包,还是应该构建一个包含每个模块命名空间的单个包?

为了澄清一点,例如,我们希望有一个 CurlWrapper 模块,这在我们的 InternalWebserviceAPI 模块(以及其他一些模块)上是必需的。

我个人喜欢为每个模块提供完全独立的包并声明对 composer.json 的依赖项的想法,这将在精神上强制解耦,并允许我们有一天将其中一些包作为开源发布。它还可以简化对这些模块的重大更改,因为我们可以将它的版本冻结在需要更新的依赖项上。

虽然,我也认为这种分离可能会增加很多复杂性,并且可能更难以维护和测试,因为每个模块都需要独立成为一个项目,而我们没有足够的人力来跟踪这么多小项目。

Composer 真的是我们问题的理想解决方案吗?如果是这样,哪个会推荐:单个包装或多个包装?

编辑1:

我想指出,这些模块中的大多数将是:

  • 库(即从 youtube URL 获取 ID 或将日期转换为“x 秒前”)
  • 包装器(如可链接的 CURL 包装器)
  • Facades(在我们的多个 Web 服务中,需要其他两种)
4

2 回答 2

2

是的,作曲家是要走的路,我建议您使用单个包。

你不知道什么时候需要这些模块。最好创建许多单个包并能够将它们全部(或单个)包含在内,而不是创建大包并且当您需要其中的一些类时需要花费更多时间将一个包分成多个包。

例如,参见 Symfony2 项目。这是全栈 Symfony2 框架所需的大量组件,但您也可以在自己的项目中使用一些组件(就像 Drupal8 正在做的那样)。此外,Symfony2 获得的包越来越多,拥有小包似乎很有用,以至于人们花时间将一些大包分解成碎片。

于 2013-03-05T22:02:22.337 回答
1

使用单个包的替代方法:为每个子项目使用单独的 composer.json 文件

这样做的好处是让您可以将所有库保存在同一个存储库中。在重构代码时,您还可以按子库对自动加载和依赖项进行分区。

如果您想将库拆分为自己的版本化包,您可以进行最后一步并将其签入自己的存储库。

于 2013-06-11T20:43:54.960 回答