谈谈我对MySQL+PHP+Flex开发的见解

1 篇文章 0 订阅
1 篇文章 0 订阅

说起用MySQL+PHP+Flex来编写网络程序和应用,不少人会觉得非常地非主流,之所以选择这一套解决方案,也是有原因的。首先说MySQL。相比DB2、Oracle这些商业数据库,MySQL的最大优势就在于它的免费特性。由于我的大部分应用都非常Personal,不太可能涉及到所谓的“大规模商业应用”,所以MySQL对我而言已经完全够用了(相信对大多数人而言也是够用了,况且还有很多所谓的企业级系统也在使用MySQL数据库);相比PostgreSQL之类的其他免费开源数据库,虽然可能有比MySQL性能更强的数据库存在,但是MySQL无疑是最普及的数据库,如果日后要使用虚拟主机之类服务的租用数据库,MySQL无疑也是成本最低的。

其次说PHP。同样,PHP也是免费开源的,但是在服务器端程序中,PHP的功能远远不如另外一种开源语言——JAVA来的完善。之所以选择PHP,主要还是看中了它的运行速度。毕竟在我这种Personal的应用下,JAVA过于强大的功能显然是杀鸡用牛刀。既然都能够达到,那有为何不选择效率更高的PHP呢?更何况Linux+Apache+MySQL+PHP的LAMP组合正越来越流行,以至于将MySQL与PHP一起部署非常容易,何乐而不为呢?

最后是Flex。由于需要FlashPlayer的支持,同样作为RIA解决方案的Flex的适应性显然没有Ajax来的强,但是考虑到Flex不像Javascript,Flex有Adobe的支持,标准相对比较统一,而且Flashplayer的装机率达到了98%以上,而且具有非常强的跨平台能力,部署上应该不会有太大的问题,反倒是Javascript由于各方面的利益关系,可能在不久的将来发生分化。此外,Flex的表现力堪比C/S架构软件,远远强于Ajax。

好了,说完了使用FPM组合的原因,接下来再谈谈这两年中开发FPM应用的经验吧。由于缺少合作者,两年来我的所有非开源项目都是我一个人完成的,所以三个部分应该都有些可以分享的经验。数据库方面的经验已经非常系统了,学校里也有相关的课程系统的学习,所以这里也不好意思多说,这里主要说说Flex和Php开发的经验。

对于开发软件系统,我有一条自己的宗旨,即就是“软件的每一种操作都是对现实中的某个流程的抽象”。根据这一理念,我在开发一个软件之前,都会把要管理的业务的所有流程总结一下,画出一张巨大的、尽可能详细的流程表(比如一个在线租车系统,除了下订单,提车,还车之类的“主要流程”,汽车损坏、退款、索赔这类的“非主要流程”也要考虑在内),这个看似与软件开发无关的过程往往要花费2~3天的时间,而且据我的经验,这甚至是整个开发过程中对最终软件的功能性和稳定性影响最大的一个步骤。

然后,从大的流程表里面遴选出需要用软件进行抽象的步骤。没有一个软件能够覆盖某个系统中的所有业务,不然的话我们就可以做出“无人服务公司”了。事实上,即使是淘宝这类高度电子化的交易业务,也需要一大批人来处理纠纷、提供咨询。所以,我们要做的从大业务流程图中选取出最常用、最需要电子化管理的流程子集,绘制出一张用于编写软件的小业务流程图来。

有了这张小业务流程图,软件的需求就明确了(在传统的软件工程中,这一部分的分析往往应该用客户完成,但是对于Personal的系统,用户本人可能也并不是很明确他们的需求,所以这部分工作也需要我们代劳)。接下来就应该是具体的软件设计了。我的经验是,软件设计要从界面开始,然后是数据库,最后才是服务器端程序。按照常规的思路,本来应该是数据库先行的,但是同样由于我们的需求并不是很明确,新的数据元素和数据关系随时都可能出现,尤其是当我们在设计客户端界面的时候,很可能会发现一些之前没有想到的元素。所以,如果界面设计在数据库设计之后的话,很可能会在界面设计阶段大规模修改数据库结构,或者为了适应数据库设计而牺牲用户体验和功能,而把界面设计作为在画完小业务流程图之后的第一步的话,由于业务流程图的思维是完全符合“用户思维习惯”的,而不是数据库的“程序员思维习惯”,所以设计出的界面会更加人性化,更加易用。

当我们有了界面之后,数据库的设计就有了明确的需求和目标,再过复杂的应用也不会太伤脑筋(事实上,大部分所谓伤脑筋的问题都是我们自己对问题本身不明确而导致的)。剩下的事就是如何把界面和数据库连接起来的事了,也就是服务器端程序的设计。

根据我的经验,用PHP构建的服务器端程序并不适合使用完全的面向对象设计,因为对象的成员函数处理比常规函数或是静态函数要慢许多,如果过分地依赖面向对象的机制,会使最终的程序效率低得惊人,甚至连JAVA(JSP)都不如。(对于这一点,我是有“血的教训”的)。如果你既想提高程序效率,又不想牺牲面向对象的机制或者想使用一些设计模式的话,最好的解决办法就是把尽可能多的函数写成静态函数,然后依旧用你的面向对象思维。

具体到设计细节上,PHP服务器端程序设计又最好能够分为数据层和业务层。其中数据层用于把所有的数据库操作包装成函数,从而向上屏蔽SQL语句(这也是被广泛地证明有效的一种设计方法);业务层则通过调用数据层的一个或若干个函数来处理来自客户端的每一种请求,并将结果包装成客户端可以理解的HTTPService或者WebService的形式。

还有客户端和服务器的通信。我个人的感觉是,对于一个Personal的系统,一组上行使用HTTP-POST,下行使用XML或String的HTTPService就够用了,完全没有必要将服务器端包装成WebService。这里我一再提到Personal一词,就是为了说明至始至终我们的服务对象都不是高端企业用户,WebService是为了方便多个系统之间进行通信的,对于我们这样的小系统完全没有必要,只会增加设计的难度和成本。在Flex一端,我的经验是每一类应用的通信单独写一个类,其中包含该类所有操作的HTTPService、结果分析函数和错误分析函数,然后在主程序中为每个类生成一个实例。用于随时通信及访问数据。

最后是Flex方面的用户交互设计。由于用户交互设计往往涉及到数据通信,所以无法再界面的初步设计阶段完成。用户交互设计往往要放在通信部分构建完成之后,所以也往往是设计过程的最后一步。这里,我的经验是把所有的用户交互函数分类写在单独的AS文件中,然后在主文件中引用。

好了,以上是我的一些粗浅见解,希望能够抛砖引玉。请大家多多灌水,多多指教~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值