在过去几年中,很多人对网络有了不同的看法,并表现出使用更先进工具的意愿。因此,xoops.org的用户数量已经增加了X倍。随着XOOPS社区的壮大,它的多样性也有所增长。
去年,当我们意识到XOOPS项目无法组织这么多人的时候,我们也必须承认XOOPS核心架构无法像人们希望的那样演变。不久前,这个程序只是一个PHP门户网站系统,甚至不像今天这样部分面向对象,几乎是单神论的。对于用户来说,XOOPS到2中增加的增强功能相当积极,但对于开发者来说,这种遗产一直在拖累我们。对核心的贡献变得越来越困难,修复一些问题也变得越来越难,现在是时候重新开始。其他一些原因也使我们相信,如果必须发生这种情况,那就应该是现在:PHP5已经到来,具有许多独特功能,有一天我们将不得不决定利用它们并忘记PHP4。考虑到我们计划重新架构需要数月时间,最好我们现在就进行这种转换。我们不能要求开发者每年都改变他们的方法。
多年来,XOOPS核心已经发展成为一个不仅仅是门户网站脚本的东西。然而,截至今天,它还不能被视为真正的内容管理系统,也不能被视为应用框架,同时它在某种程度上是这所有东西的结合。正是由于这个原因,人们已经无法定义什么是XOOPS,这是我们在尝试前进之前需要解决的第一个问题。
因此,我们首先尝试设计一个能够集成所有可想象组件的全球架构。这里的目的是不仅列出所有这些组件或详细说明它们的个别实现,而是为我们未来的系统提供一个总体无限制的结构,主要描述其组成部分将如何相互关联,赋予每个部分一个明确的位置。
一旦底层实现,从最底层开始,这个全球架构将得到增强和细化,逐步包含新的类和框架,直到我们达到最终目标:拥有一个平台,将允许我们以我们希望它们成为的方式运行和维护所有xoops.org网站(而实际上它们已经在很大程度上围绕XOOPS及其局限性建立)。
首先,Xoosphere项目关注的是一种方式,远多于关注特定的程序或功能。
适当的方法论应允许我们获得一个系统能够尽可能满足实际XOOPs用户在过去两年中表现出的各种期望。
Exxos将是一个对象实例化和运行时配置框架,旨在帮助构建高效、可配置且灵活的PHP应用程序。它将允许每个对象在几个“执行模式”之间切换,从而使程序员能够灵活、可配置和自适应地上传他们的组件版本,同时提供最优化和更具可扩展性的版本。
Exxos本身将利用这种能力,提供一个强大的运行时配置层,允许人们配置系统的各个方面。在开发模式下,其工厂将根据用户的偏好创建和配置对象,生成可以直接在生成模式下实例化的预配置扩展类。
此框架还将提供标准文本编码服务,这些服务本地可用(文本编码是高级国际化的关键)以最小化现有后端(如iconv或mbstring扩展)之间的差异,以及实现观察者的标准化方式(或事件处理器)。
内核将是我们的Exxos实现,提供一个全局的工厂,负责 instantiation 本系统中所有对象,并负责全局引导和关闭序列。它将带来以下范例和特性
操作层的最后部分将由架构服务组成。此层将包含提供标准化API给外部服务或系统的各种低级框架。由于大部分类将被定期使用并在每个页面请求中使用(其中许多是由高级组件使用的工具),它们将被设计得简单和优化,以及更多地带来标准化和模块化,而不是功能。
XoopsDb框架将从PDO在PHP 5.1中最终带来的标准化中受益。我们框架的新版本将模仿PDO接口,确保如果可用,可以直接使用此扩展(预先提供对所有支持PDO平台的支持:Ms-SQL、MySQL、Firebird、Oracle、PostgreSQL和SQLite),但我们还将提供一个备用的MySQL驱动器(并希望如果有人愿意,也能提供MySQLi驱动器)。
此版本的XoopsDb也将是编码感知的,并能自动处理文本编码转换(如果可用,使用原生驱动器支持,否则使用Exxos提供的引擎)。
XoopsHttp框架将包含一些Http特定的组件,如会话处理器。在这里的一个重要观点是我们将确保XOOPS 4根据Http协议构建,而不是与之对抗。在全部开发过程中,我们将确保XOOPS始终是一个使用最明显标准的Web构建平台,如这个协议尽可能妥善地使用。这不仅允许我们将XOOPS想象成更大平台或系统的一部分,也将是我们一些架构选择背后的原因,例如,XOOPS 4将内部操作标准、易读的URI,如果可能,将保持这种状态,或者在最坏的情况下转换为臭名昭著的xxx.php(与后来使用“短URL函数”转换脚本位置的程序相反)。
Smarty将是首先在XoopsTemplate框架中实现的动力引擎(尽管与XOOPS2不同,并且添加了默认引擎的自定义扩展),但根据情况,我们可能会在这里添加我们的自定义模板引擎,使用类似于Smarty的编译器(但是没有它很少使用的功能,以保持简单和可扩展性)。
核心服务层将提供在较低级别架构组件之上构建的初级服务,并作为应用层MVC导向组件之间的中间人。
认证框架将提供两项服务:认证服务(处理整个认证过程)将与认证驱动器分离(负责检查凭证有效性),这个最后一个是可配置的。将提供几个默认驱动器(LDAP、XoopsDb...),但人们将能够设计定制的驱动器以扩展这个框架的可能性。
XoopsUi将在稍后提供基础工具,用于构建高级XOOPS4应用程序的用户界面。其中关键元素之一将是用户界面文件,开发者可以使用它来创建/描述用户界面(一种超级模板,可以实例化对象并提供不同显示技术的多个版本,例如HTML,但也包括XUL等)。根据XML,用户界面文件将以与Smarty模板相同的方式进行编译,以确保在生产网站上快速访问。
XoopsTheme将封装页面构建服务的功能,它将模块输出包装成具有主题的页面。通过增加一个中间应用级别模板和允许对象操作页面级别元数据(因此,插入到页面中的小部件可以确保所需的样式表和脚本文件从页面标题中获取),页面构建将得到增强。同时,主题作为资源容器,也将获得更多功能:现在人们可以使用主题定制构建输出使用到的任何资源(无论是模板、样式表、脚本文件还是图像)。当请求访问主题资源时,XoopsTheme会自动检查主题中是否存在自定义版本,并修改资源URI。这些最后功能的访问将通过自定义Smarty编译器函数来实现,以确保它不会成为可伸缩性的致命杀手。
我们也正在考虑将此新框架的一些功能提供给2.1/2.2分支。
XoopsData将设计来处理文档基于Web应用程序中一些最重要的功能领域:对象图管理和持久性。它将提供的类将帮助模块开发者不必关注从持久存储中检索或保存对象属性,或在保存之前验证这些属性值。其关键功能包括
应用服务层将包含基于MVC模式的多个框架,以尽可能快速、简便地构建面向文档(模型)的应用。ApplicationKit将提供基于XoopsData的对象控制器,用于创建、查看或编辑受管理的文档。WidgetsKit将提供若干默认控件,用户可以使用它们构建强大的用户界面(工具栏、增强表单控件)。尽管我们认为Xoops不应该提供完整的控件库,但至少我们将提供几个默认组件以及一些标准化,以便第三方开发者可以创建自己的XoopsUi控件。
新平台提供的模块将分为几类
在我们开发此版本的过程中,主要目标是使Xoops成为一个真正的开源项目,并且高度集体化。从我最近看到的一些论坛帖子上看到的情况,我猜想大多数当前的Xoops用户可能没有意识到这种变化的这种重要性:这从来不是以前的情况,这种情况最严重的后果就是Xoops2架构无法轻松地增强,这本来可以允许我们通过更集体的努力继续其开发。
这一目标将给传统的Xoops开发方法论带来很多变化。这意味着每个人都可以忘记之前核心开发团队采用的“私下编码,完成后发布”的方式,可以说“你好”早期的alpha核心版本,或者长期期待的技术文档。更确切地说,这些都是你会在下周看到的事情。