先介绍一下背景
我们公司是一家只有四名开发人员的小型初创公司,正在开始将我们的产品重构为可重用的模块,以简化开发过程,提高生产力,并且在此过程中,我们希望在合适的地方引入单元测试。
与小型初创公司一样,我们不能浪费太多的开发时间,但正如我们所见,这对于我们的中长期业务成功极为重要。
目前,我们有两种终端用户产品。两者都是建立在我们自己内部业务层之上的 Laravel (PHP) 应用程序,主要由 web 服务、restful api 和一个庞大的数据库组成。
该业务层为这些产品提供了大部分数据,但每个产品的使用方式完全不同。我们计划在不久的将来构建其他产品,除了维护和改进这两个几乎完成的产品。
为此,我们打算将这些(以及未来)产品的通用逻辑抽象为可重用和解耦的模块。显而易见的选择似乎是 Composer,即使我们对此知之甚少。
现在到真正的问题
我想就如何以测试驱动的方式开发内部包询问其他意见。每个模块应该是一个带有自己的单元测试并需要它的依赖项的 composer 包,还是应该构建一个包含每个模块命名空间的单个包?
为了澄清一点,例如,我们希望有一个 CurlWrapper 模块,这在我们的 InternalWebserviceAPI 模块(以及其他一些模块)上是必需的。
我个人喜欢为每个模块提供完全独立的包并声明对 composer.json 的依赖项的想法,这将在精神上强制解耦,并允许我们有一天将其中一些包作为开源发布。它还可以简化对这些模块的重大更改,因为我们可以将它的版本冻结在需要更新的依赖项上。
虽然,我也认为这种分离可能会增加很多复杂性,并且可能更难以维护和测试,因为每个模块都需要独立成为一个项目,而我们没有足够的人力来跟踪这么多小项目。
Composer 真的是我们问题的理想解决方案吗?如果是这样,哪个会推荐:单个包装或多个包装?
编辑1:
我想指出,这些模块中的大多数将是:
- 库(即从 youtube URL 获取 ID 或将日期转换为“x 秒前”)
- 包装器(如可链接的 CURL 包装器)
- Facades(在我们的多个 Web 服务中,需要其他两种)