自 2013 年 12 月首次稳定发布以来,Joomla 框架一直在稳步发展,以更好地满足 Joomla 生态系统的需求,为全球 Joomla 安装提供基础。在这个 Joomla 代码库的小部分上所做的工作非凡,为更强大的 Joomla 4.0 版本奠定了基础。今天,我们想分享 Joomla 框架现状以及我们对它的未来计划的更新。
背景
讨论未来而不先了解它的过去以及是什么让它达到今天的状态是不合适的。框架是作为先前 Joomla 平台的“软分叉”演变而来的,该平台是一组核心库,自 2005 年以来一直为 Joomla 本身提供动力。虽然这在当时被视为有争议的举措,但多年来,事实证明这对代码库来说是一个宝贵的举措,因为它使开发人员能够偿还核心库中积累的许多技术债务,而不会对主要的 CMS 发行版造成干扰,以及使新功能能够在实际应用中开发和测试,然后再引入 CMS。这种分离的缺点是,框架代码的大部分现在已被复制并单独维护,导致错误修复和改进只在一个源代码中进行。由于这种分离,社区成员能够在核心 API 中引入几个主要的架构改进,这些改进将被添加到 Joomla 4.0 版本中。
在 2016 年,数据库包进行了更新,以提供对每个受支持的数据库驱动程序的预处理语句集成的全面支持,这是对现有 API 的一项重大安全增强,也是 PHP 生态系统中任何数据库抽象层中的标准功能。由于 API 支持现在已弃用的 mysql PHP 扩展,因此之前从未尝试过对整个包进行此操作,但当 PDO 基于驱动程序添加到平台和框架时,该支持已设计到 API 中。但是,这个完整实现的初始发布中有一些疏忽没有考虑到,这需要对数据库 API 进行额外的架构更改和改进,以解决每个驱动程序的底层实现中的问题,并提供一致的 API,这项工作将使 Joomla 4.0 能够完全支持并使用预处理语句在其数据库查询中。
自从 2015 年开始进行 框架 2.0 包的工作以来,已经付出了很多努力来改进框架的代码和产品(作为一组独立的包以及作为 Joomla 4.0 的基础的 API)。除了数据库 API 工作之外,我们还 引入了新的控制台包,它利用 Symfony 的控制台组件,使 Joomla 开发人员能够在他们的扩展和应用程序中构建良好集成的命令行实用程序。此外,框架提供了一个依赖注入容器,允许以集中方式管理应用程序依赖关系,现在它正用于减少 Joomla API 各个元素之间的硬耦合,允许高级集成,其中核心组件可以替换为自定义实现。我们的会话包经过了全面检修,以解决类设计中的几个架构问题,从而产生了一个可以完全测试的 API。
现状
在 2018 年 3 月,45 个独立的框架包累计下载量达到 100 万次。其中一些包受到了好评,每个包的下载量超过 90,000 次,而其他包并不那么受欢迎,下载量不到 2,500 次。这表明我们有一些做得好的地方,而其他地方可能是用心良苦但没有成功,我们并不害怕承认并非每个想法都能奏效,有些最终会失败。同样,我们的一些包得到了很好的维护(在某些情况下,这部分归功于它们在 CMS 中的使用),而其他包则几乎没有得到任何关注,这可以用作资源过度分散或对这些产品缺乏兴趣的指标。
开发的重点一直放在我们包的 2.0 分支上,借此机会针对 PHP 7 最低要求优化代码,或试验(并实施)架构更改,从而提高我们包的实用性。如前所述,这导致了许多急需的改进,这些改进将在未来几年内使 Joomla 社区受益,我们为我们不断发展和改进的努力感到自豪。然而,我们也已发展到足以看到框架失去了一些重点,并且需要重新分析我们当前和未来的努力。
展望未来
在分析了框架的现状、我们正在提供的内容、PHP 生态系统中可用的资源以及 Joomla 社区中维护框架可用的资源后,我们决定弃用几个包(除了现有弃用的 Compat、Form 和 Log 包之外)。
- 所有 API 连接器库(GitHub 连接器除外) - 这些库自框架首次稳定发布以来基本上就成了弃用软件,多年来几乎没有下载,也没有得到多少维护;GitHub 连接器除外,因为我们正在积极维护这个包,并在整个项目中非常一致地使用它。
- DateTime 包 - 该包的大部分功能现在包含在 Carbon 库 中。
- Date 包 - PHP 的 DateTime 的这个子类在 CMS 环境中非常有用,在 CMS 环境中,日期/时间字符串通常会本地化和翻译,或者用于快速将 DateTime 对象转换为 SQL 格式的字符串,但是这些功能已从框架包中删除,并且 Carbon 库再次成为可行的替代品。
- Cache 包 - 尽管这是一个一直在积极维护的包,支持 PSR-6 和 PSR-16,但我们发现将 PSR 兼容的缓存包集成到 CMS 中是不合理的,因为它依赖于 PSR 不支持的功能,实际上需要我们维护两个缓存 API;我们宁愿专注于支持一个,因此 CMS 实现将是那个包,尤其是考虑到 PHP 生态系统中有许多得到良好支持的包。
- LDAP 包 - 这个包一直是支持和维护很少的包,它的内部 API 设计让人想起它在 PHP 4 时代编写时的样子,我们推荐 Symfony 的 LDAP 组件 作为替代品。
我们一直在努力改进的另一个重点是框架包的文档,并提供资源来帮助用户开始在框架上构建应用程序。我们为每个框架包建立了一个标准化的文档结构,该结构为需要文档的部分设置了最低结构(到目前为止,这主要集中在 2.0 升级文档和包概述上,尽管一些包也提供有关使用各种类的功能指南或示例指南),随着框架 2.0 版本的临近,这项工作将被集成 到 Joomla 框架网站中。
我们坚定地致力于为 Joomla 开发的未来创造一个坚实的基础,我们认为这些努力将最有助于我们利用现有资源并比以前更容易吸引新的贡献者。