大家好!
自从我开始这个项目以来,三个月的时间飞逝。我想这就是当工作很有趣、你能学到很多东西并且有很好的导师时会发生的事情。至于这篇博客的内容,我们将从项目的描述开始,介绍它为Joomla带来的价值,最后以个人笔记结束,谈谈我对今年项目的印象。
实体!
项目的基本想法是用Active Record实现重新构建Joomla模型。这将是我们现有的模型和表格实现与Laravel的Eloquent框架中包含的改进的Active Record实现的想法的跨实现。
这个项目的需求来自于当前模型架构的限制,这些限制在去年GSoC Web服务项目中已经达到。
因为达到这些限制,很明显模型层必须重做。更进一步,出于让Joomla开发更简单的愿望,Entities项目应运而生。
实体项目的范围是使数据库交互比从头开始编写完整的SQL查询更简单。开发者需要做的就是为每个表定义实体类,以及以下内容
- 转换器 - 对象的自定义字段
- 类型转换 - 确保原始数据在PHP中以所需的类型处理
- 别名 - 使得Joomla不同组件中的不同列名统一
- 关系 - 最后但同样重要的是,定义表的关系,以便访问相关数据就像访问一个属性一样简单。
实体类的示例
现在,让我们来看看这个项目带来的改进,简单地比较一下两种查询方式。
旧方法
新方法
这不是同一个查询,但很容易理解这个想法。不需要处理数据库对象、表名、别名等。
将本项目整合到Joomla CMS中,分为两个阶段进行整合
- 通过将当前组件中的表(Tables)实现更改为实体(Entities)。这在用户(users)组件中针对UserNote进行了示例,详情请见这里。
- 完全整合,通过将所有模型(Models)更改为实体(Entities),并摒弃所有旧的表(Tables)。这一部分正在进行中,涉及到Joomla MVC和错误处理的复杂影响。目前进行中的工作可以在这里查看。
个人笔记
我想从将本项目与去年的并行测试项目进行比较开始。例如,去年的项目更多地偏向于研究。很大一部分重点在于可能做到或不可能做到的事情,所以我拥有更多的自由。最终结果是不确定的。
今年,我们知道需要什么,但开发难度很大,所以需要定义一个范围,否则项目不可能在3个月内完成。所以,我们的模型中还没有事件,没有批量处理,只有一对一和一对多关系。此外,该项目对Joomla核心有影响,所以情况有点不同,我必须更紧密地遵循Joomla标准。
总的来说,我会说这个项目过去和现在都非常棒。如果让我在两者之间选择一个,我不确定,它们非常不同,我从中学到了很多。
从组织角度来看,今年非常棒,感谢我的主要导师George Wilson,他总是提供大图景并对PR提供快速反馈。我真的很享受我们的讨论,特别是关于这个项目中的许多设计选择。
最后但同样重要的是,我想说这个项目让我对开源和Joomla有了新的认识。看到你的知识可以影响多少人,我肯定会继续为这个项目做出贡献,希望它能尽快成熟。