我需要什么样的RIA Client Framework

研究flex有一段时间了,一直想写一点比较实在的东西。然而真到动手的时候往往又被困住了。

我现在真的懒了,过了原来学js时不用任何framework裸奔干活还不忘了写得很oo的年纪了(其实那时候我在做js方面的intern)。每次在脑子预构要做的时候,发现自己不得不做这么多“dirty work”,重新发明那么多轮子,一下就把我给吓住了(如果有钱发什么也吓不倒我)。

结果是,我什么大东西也没编,倒是一直幻想一个好用的RIA框架应该是什么样子(也就不限于flex了,如果gear、sliverlight、java fx方面上能用类似的东西我会考虑立马转向)。所以就随便写一点想法在这里,没准这种东西已经有了也可能的说,如果这样的话,麻烦在回复里推荐给我吧

—懒懒的分割线—-

这里先撇清我说的RIA是带着Server端的(不然怎么叫Internet App),所以题目中说的是Client Framework(不过很多东西还是要server配合才能搞)。Server端提供Service(RESTful、SOAP、AMF或者什么都行)。Server和Client之间传递xml、json或者什么编码的value object。

接着看客户端,MVC是必须的。不过这部分已经从Framework角度讲已经没问题了,无论是PureMVC还是Cairngorm都已经够用了。所以我就每一个部分的说

Model部分:

1. 统一的model class。指的是server端和client端model的统一,现在一般得搞两份,实在没必要。理想状况下用同一份model,server或者client专用的属性或者方法用继承或者annotation说明。

2. 考虑server端代码不可见的情况。至少可以通过server返回的vo生成model的桩(soap没有这方面的问题,但现在restful居多)。

3. 对本地数据库管理的封装。air和gear都支持sqlite,在本地缓存数据的好处是显而易见的。但是现在开发人员需要事无巨细地处理这个功能。理想情况下,首次创建数据库,client升级时数据库的升级,等等这些常用必要操作,框架应该封装好。开发人员提供必要的sql script即可。

4. ORMapping。这个不废话了。

5. 离线支持。Client数据同步到Server,参考greader离线阅读的方式。这个能力应该被框架支持,开发人员需要说明那些操作可以离线处理,如何在本地缓存操作结果,同步时机即可。

6. Server更新的处理。用于处理在本地缓存数据之后,server端数据更新的情况。需要server和client统一的方案。最理想情况下是应该有一种开放、通用的协议被广泛支持。大概思路是client提供时间戳和资源类型,server返回时间戳之后更新的资源。

Controller部分:

一句话就是更强的Comet。现在的观点Comet是server push data。考虑Rich Client,可以换一种观点,变成server调用client的功能,原来push的data只是参数(所以放到controller部分)。其中现在Comet谈到传输协议一层,但是之上还应该又一层互操作协议以及对应实现。这里:

1. 首先是让server和client很好地相互理解。至少也是一个类似xmlrpc的东西,从发起调用到调用成功,中间打包、拆包、client上的method dispatch之类全部透明。

2. 其次是对常用功能的封装。连接,断开等等。也要透明。

3. 最后考虑server和client不是同一方开发的情况。不同于client invoke server的调用,这里的反向调用是从层级结构上讲是下层调用上层。IoC原则,server方提出接口描述,client实现。接口描述语言肯定是互操作协议的一部分,但是扮演的角色和传统稍有不同。

View部分:

这里我能谈的不多了。只随便说一两句flex。

1. 需要一个更好的中文默认skin。现在的默认skin完全不适用于中文。

2. 更容易地借鉴(抄袭)设计。好吧,我到底不是一个设计人员。如果不是网上有那么多“免费”的css,我估计连勉强看得过去的html页面都写不出来。flex这方面门槛太高了。联合上面那点。业余开发人员很受打击。

—-又是分割线——

信手写了一大篇,半是存底备份,怀疑中间有一些点还是很有意思可以做一做玩一玩的。不过原来胖客户的时候以及现在在一些c/s体系结构的应用领域里(例如网游、数据库),估计类似的东西或多或少都解决了一些。

所以很多东西也许只要有对应的走http的轻量级版本就好了。

我需要什么样的RIA Client Framework》上有2条评论

发表评论

电子邮件地址不会被公开。