2 分析
一个好的系统的设计离不开分析,而一个好的分析能使该系统的设计事半功倍,以下将对此演出票务管理系统来进行可行性分析、需求分析、概要设计以及数据库设计。
2.1 可行性分析与需求分析
2.1.1 框架的选择
使用框架的意义是为了简化开发流程,降低程序各模块之间的耦合度,降低开发难度,提高维护效率,并且提高程序模块内部的聚合度。当一个框架不能达到这些目的的时候,就不应该使用这套框架。框架可以很庞大,但是不应该太臃肿,而且使用某一个框架,必须对这个框架的内部机制完全了解,确保不会有故意留下的漏洞和后门。框架代码应该开源,一个闭源的框架任何人都是不会放心地去使用它的。
在进行开发之前,仔细研究了部分已经出现很久的php(Hypertext Preprocessor)框架,分别是yaf(Yet Another Framework),tp(Thinkphp Framework)以及yii(Yii Framework)。对这些框架其实都不合适进行这套系统的开发,下面是对他们的分析。
yaf是一个开源的php框架插件,也是在工作时接触到的第一个php框架。使用时候的第一感觉就是,什么都有,却也什么都没有。yaf提供了模型-视图-控制器三层架构分离的实现方法,同时对一些调用过程进行封装,让编程模式完全面向对象。yaf框架总在强调它有多好,多快,但是却忽略了php本身的缺陷:即时编译。无论是.net,java,python,nodejs,这些程序在担任服务器程序的时候都做到了同一个特性,源!自&优尔*文,论/文]网[www.youerw.com,即只在服务器开始的时候编译一次,之后所有操作都是在内存中完成的,除非必要的io交互,但绝对不会对程序代码进行即时编译执行。php做不到这点,因为php的所有程序的生命周期是从收到客户端请求开始,到响应请求完成结束。所以单靠框架无法解决这根本的问题。此外yaf有用的功能真的太少了,对于框架而言,如果仅仅实现了三层架构分离,那对开发者实际上意义并不大。
yii是一个php代码写的框架,打个比方来形容,php就好比是小麦粉,而yii则是干脆面。yii在php的原生方法的基础上,封装了一些被称为“添加剂”的东西。比如说,在原生的php代码中想要获取到用户提交上来的参数数据,可能会直接使用php提供的全局变量获得原始数据,而在yii框架中,则可以使用yii封装之后的数据,串行化的数组可能已经被yii转义成php可用的实体数组。添加剂虽然能够改变平淡的口感,但是用多了也会让人降低食欲。严格意义来说,php这门语言并没有做到真正地面向对象。在完全面向对象的java语言中,三层架构里的模型层都是直接和数据关联的。php做不到这点,自然yii也做不到。这就导致了虽然yii的写法看似都是对象调用,实际上都是程序代码被用到后即时编译,然后类代码实例化成“对象”的结果。这种对象的生存周期并不符合符合现实逻辑,此外yii框架的源代码非常庞大,却也非常琐碎,这导致每次收到一个请求后,服务器上往往需要引用十几个php代码文件才能给出响应。上一段说了,从硬盘读取速度是很慢的,一是寻路慢,二是读取慢。php设计之初的目的就是为了快,开发快,执行快。yii这样做在实际违背了php的初衷。
最后说说tp。tp的名字早有耳闻了,但是一直不愿意接触,因为太长的代码阅读非常困难,尤其是框架代码。很多问题更愿意思考自己会如何解决,然后再去比较是否与现有的解决方案哪个更好。大道至简,框架是为了减轻开发难度而诞生的,如果使用一套框架的学习成本太高,否定这套框架是必然的。tp的学习成本太高,大部分api都是单字母的,如果不阅读官方文档没法看出这句话做了什么,再加上官方文档说明不够直白,使用tp必然是一个大坑。