花了三周时间,给公司写了一个基于Flex的web流程设计器原型系统。既然是原型系统,肯定有很多细微之处不完善的,但作为未来产品组件一部分,其预研和构架部分,还是拿得出手的。
Flex本身在图形化方面提供了很良好的支持,但是要想实现Model与视图的分离、Command的处理等基础事情,这个就无法与Eclipse GEF比了。
于是首先不得不模拟GEF,在底层提供一套Model-EditPart的MVC构架,以及Command Framework框架。这两个基本框架一搭建,就可以很好的解决“Model”、“View”、“Action”之间的响应和处理,以及图形的显示和渲染。
改天有时间,把这套构架的思路和实现,与大家分享一下,先show一下图片吧:
拖拽本身其实并不复杂,主要如何解决Model与View之间的映射和响应,这个是最主要关键。同时,在Pallete中的Activity图标和类型是要能够很容易扩展的。
所有的Model都需要实现toXML和fromXML接口,这样就可以很容易实现对象与xml的映射。当然,Model本身也需要引入一些Listener机制,让视图和其他编辑组件,可以在Model更改后响应变化。
对于属性Panel,原本是设计成“动态配置化加载”的,没想到,Flex本身对动态加载Class竟然支持的不理想,造成这一块没法良好的实现,寒。