在现在的软件业界,我认为很大的问题是开发人员甚至是公司从来都没有真正的把用户当成上帝,当然,这和目前业界的项目有很大的关系,例如项目通常都是时间非常的紧张,N多开发人员投入只能尽量去保证功能、需求的实现,在界面以及交互上往往不是那么的重视,但其实业界很多成功的产品都证明,功能往往不是决定性的因素,界面和交互才是用户最为重视的,而且通常也是打败对手的重要地方,为什么项目中不在重视功能的同时去重视界面和交互呢,大都是因为现在的框架在界面和交互变化的支撑上都不是很好,导致了每次界面的改动都要花费很大的成本,而交互上则一方面是现在交互设计师急为的缺少,另一方面是还没引起企业足够的重视,所以其实我觉得在web应用开发框架上最大的目标就是为“把用户当上帝”提供足够的支持。
遵循“把用户当上帝,重界面和交互”的原则,本文从愿景角度阐述对于Web应用开发框架的期望,同时从框架角度的基础设施以及非功能性需求上对整个Web应用开发框架给予说明,最后简要的说说在架构层次的关注点以及可选择的技术体系。
1. 愿景
★ Html的纯洁性
这点就是体现“把用户当上帝,重界面和交互”的原则,在保证了Html的纯洁性的情况下,就可以在功能和页面交互未改变的情况下无需编码直接使用UI Design形成的html,形象的一个例子就是可以在用户仅仅需要改变页面的显示样式、布局的情况下,只需要直接让UI工程师设计然后切割形成html放到系统中就可以直接用了,^_^
★ 无编码的实现CRUD型的应用
可以直接通过简单的配置生成CRUD形式的应用,这点还是从一个快速开发的角度来考虑的。
2. 基础设施
基础设施是框架的重要组成部分,作为框架就需要提供一定程度的基础设施。
从愿景角度去看,Web应用开发框架应提供可绑定数据源的Web控件、对绑定的数据的操作的支持、页面元素交互行为的支持、IDE/Web管理端。
首先说下几个概念,数据源是指持久化性质的源,如数据库、文件;页面元素大可以是页面,小则可以到页面上的任意域,如文本框;交互则是指用户与界面产生的互动。
★ 提供基础的可绑定数据源web控件
在这点上至少要提供树控件、丰富的表格控件、Tab页控件以及菜单控件,这些控件绑定的数据源既可是文件、也可以是jdbc形式的数据源、同样还可以是ORM形式的数据源。
★ 提供对绑定的数据源的操作的支持
提供对绑定的数据源的通用操作的支持,减少重复劳动,如支持新增、编辑、删除、分页、查询、统计分析、数据校验以及数据实例的权限控制。
★ 提供基础的页面元素交互行为的实现
提供对页面元素交互行为的支持,如下拉时需要下拉出绑定了数据源的web控件等等,根据之上定义的一个观点,元素可大至一个页面,小至一个文本框,也就是说可以随意定义页面中的交互行为,在交互行为上至少支持下拉、弹出、链接以及Continuation四种形式。
★ 提供IDE/Web管理端
IDE/Web管理端的提供主要是为了提高框架的可用性,通过管理端可导入一个html,对html中元素进行动态元素的绑定设置以及交互定义的设置。
在提供了这些基础设施后就可以通过这套框架的快速的将UI Design产生html转化为具备一定功能的系统运行界面,并且不对HTML产生任何的污染。
3. 非功能需求
作为框架而言,非功能需求也是非常重要的部分,尤其是象框架的扩展性、开放性、智能性、稳定性以及高效性方面。
★ 扩展性
在扩展性上采用插件以及扩展点两种策略来提供足够的支撑,插件为框架的基础设施的扩充提供支撑,扩展点为基础设施本身的扩展以及灵活提供支撑。
★ 开放性
在系统的开放性上一方面采取提供AOP的机制,使得对于系统的流程过程可控。
另一方面由于元数据表达往往容易造成信息不完整的情况,在扩展性上特别要保证系统各层次的可替换性,这样即使在框架无法支撑的应用中也是可以在使用框架的基础设施的同时自主开发部分的功能。
★ 智能性
智能性主要在元数据的智能性上以及框架拥有学习和记忆的功能上。智能性已经逐步的成为了框架的重要考评点,越智能的框架用起来必然也就最为方便,而拥有学习和记忆能力的框架就更强了,^_^
★ 稳定性
在稳定性上采用微核机制来提供保证,在插件崩溃的情况下仍然保证系统核心的稳定运行。
★ 高效性
高效性方面主要采用缓存机制加以实现,同时需要考虑框架在可伸缩性方面的支持。
4. 架构关注点
根据框架的基础设施以及非功能需求的简单描述,在框架的架构层次最需要解决的是这么一些问题:
★ 微核机制
微核机制在目前已经有N多的方案,在目前考察的情况下决定采用eclipse的equinox。
★ 插件策略
在采用equinox的情况下这个问题自然解决。
★ 扩展点策略
在采用equinox的情况下这个问题自然解决,只是在设计时也仔细的考虑基础设施的扩展点的定义。
★ 元数据的定义
元数据的定义需要围绕基础设施而进行,同时重点在于保持元数据的可扩充性,另外在系统的层次的开放上也需要定义到元数据级别,也就是说假设现在系统的层次为command--service,那么开发人员可以选择在某个模块中替换command或者service的实现。
★ 缓存机制策略
缓存机制着眼于前端的页面缓存、后端的处理缓存和数据缓存。
★ Html无污染实现策略
Html无污染的实现策略采用Decorator Html的方式,采用xml描述html中元素的方式,引擎解析形成最后的页面的形式。
★ 控件绑定数据源的策略
控件在绑定数据源上着眼于提供对于数据获取形式的支持,文件形式、jdbc形式、orm形式等等,另外则是在控件对于数据源的展现以及控件本身的交互控制上,同时要特别注意控件的扩展性以及开放性。
★ 数据源操作统一实现的策略
形成统一实现的策略,同样的需要考虑扩展性和开放性。
★ 交互行为实现的策略
在下拉、弹出、链接以及Continuation的实现上考虑采用适当的策略,同样的要重点考虑扩展性以及开放性。
这个框架有人感兴趣吗?如有志同道合的人的话准备拉起队伍,^_^