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