Szopen Xiao

关于 Toknot 框架

2014-08-04

Toknot 是一个 PHP 的 Web 开发框架,目前基本结构已经确定,现在主要的工作是在细节与功能上的强化。

Toknot 这个框架并不是我突然之间就想开发的,它经过了很长时间的进化,并吸收了我六年的PHP开发过程的经验。

2008年我开始独立给公司开发一个FAQ系统,这是一个简单的CMS程序,PHP主体程序其实就是一个PHP类,包括了简单的文章发布与管理,以及HTML模板分离功能。

2011年我开始独立开发一个电商程序,这个程序已经有了框架的雏形,它包括了业务逻辑部分,功能模块部分,以及模板处理部分,这个模式在我开发公司通行证程序的时候得到了强化。由于分成这三块,让我的API接口变得十分稳定,开发也相当快速,并不会在需求变更,数据结构变更,功能增减后大幅度修改接口调用方式。

这个项目完成后,框架的第一版基本已经完成了,在后来我吸收了 web.py 框架的处理请求的方式后开始开发第二版,也就是当前框架结构。

Toknot 是一个单入口的模式的框架,由于受到 web.py 和一些常驻内存型web开发语言的影响,所以我就将 Toknot 在运行模式上按这类程序来开发,整个运行流程就变成了 PHP 总是先启动 Toknot 框架,框架根据访问情况调用各个功能。虽然由于 PHP 的脚本特性,框架并不是常驻内存的,但是这样的做法让我感觉能够控制住框架使用者的开发,让开发思想变得统一,而不会出现各自为政,并且丢去框架的问题出现。

我要做的就是让框架把业务逻辑运行前期所有的事情都做好了,并在运行其间提供辅助。所以我规定了请求 URI 的解析规则,类的自动加载规则,外部提交数据获取的接口等工作。而对于运行期间框架统一了错误转换为异常,日志的处理等工作。这样开发人员做程序其实就变成了将业务填充到框架指定的地方,等待调用。

由于我要避免业务逻辑与模块部分的功能相互重叠,而又因为框架的原因必须多写一次,所以 Toknot 并没有强制规定模块的开发模式。虽然这会让代码风格不一致,但是至少让程序简单了。如果需要增加模块这一开发模式,框架也会帮助你直到加载,但是整个开发却需要程序人员自己控制。

Toknot 明确定义如何开发的只有 Controller 与 View 这两个部分,但也没有很多强制性的限制。开发人员只需要将类文件放到指定路径即可,当然框架还是提供一套开发规则指导。这些开发规则指导展示了如何框架很多特性与功能模板的调用方法。并不会强制限制开发者必须继承或调用框架的相关组件。

按照框架定义的开发规范,能方便的调用 Toknot 提供的用户访问控制系统,以及数据库操作方法,并能快速构建管理后台程序。

整个 Toknot 都是面向对象的,包括配置项的访问,数据操作,模板中的数据展示都已经对象化了。为此 Toknot 还提供了字符串,数组,文件,对象等一些基础类。当然由于 PHP 的原因,框架并不能定义数据类型并让这些数据类型变成对象化。不过既然要全部都对象化,那么提供这几种类来转换原有的数据类型也就是十分正常的了。并且我希望提供这些类能对数据操作能带来便利。

由于 PHP 的数据类型与第三方数据存储提供数据类型并不相同,并且不是简单的映射,所以目前带来的便利很有限。

PHP 操作数据库存储一般都是作为框架提供的一个重要功能,大部分框架是以驱动的方式来访问数据库,并返回数据给 PHP, Toknot 的数据库操作则是将数据库的相关元素映射到了 PHP 的类上,当开发者创建一个对应类实例时,其实是建立一个到数据库的映射实例。目前 Toknot 提供了数据库类,表类,数据字段类,联合临时表类这几个数据库基本元素的映射类,每一个实例都会对应到数据库实体的相关数据上。因此对于数据的常用操作,只需要通过简单的调用即可。目前对于多表联合查询,框架也提供一个类来完成类似操作。该对象会根据实例属性自动组合查询语句并完成查询,然后返回结果。

为了方便数据操作,框架提供了一个 SQL 构造器,方便开发人员快速将数据转换到 SQL 语句中。

另一个对象化操作是,程序用户系统,这一用户风格参考了类 Unix 的用户风格,与访问控制模式,框架的用户系统会按照读,写,更新这几种操作类型来判断当期业务逻辑是否适合当期用户访问,并且返回给用户一个结果。业务逻辑类型需要开发人员明确标记,并标记该逻辑所属用户及组,如果这些信息开发人员没有在程序中明确提供,那么用户系统会根据当前 HTTP 请求的方法来作出简单判断,用户则默认为 root 用户。

之所以提供这么一个用户系统,主要是想提供一个简单并有较强适应,并安全的用户系统给开发者,而让程序在维护阶段不至于因为用户系统设计的局限而阻碍功能权限的扩展,很多时候,开发人员都会抛弃原有的权限控制系统而直接定制新功能的权限控制。而 Toknot 的用户系统由于将权限控制到用户与类方法,并提供了组策略,是所以能适应批量相同权限等场景与很细分到个人并仅仅只在一处使用的权限功能部分。

目前这个用户系统基本测试已经完成,但是对于实际的复杂应用环境还有待测试。

Toknot 核心部分主要完成了业务逻辑前期工作,让开发人员只关注于业务部分。模块组件则提供了网站基本会使用到的模块,让开发人员能快速搭建出网站框架,增加开发速度。

comments powered by Disqus