当前位置: 首页 > news >正文

Flex开发流程设计器的经验之谈(2)

第一篇写于2个多月前,其间赶上春节,同时去年底突然安排了新任务,忙于另外的研究去了,从而一直没有再继续总结。还有个原因,是因为期间在断断续续的flex设计器原型系统研发过程中发现很多原有的一些细节设计之处不足,又作了很多细节性的重构和完善。这几天又接着完成了一个阶段的原型实现,才有空闲再接着写总结。
第一篇地址:http://blog.csdn.net/james999/archive/2008/11/16/3313861.aspx

首先回顾一下上一篇的内容。其实上一篇是非常“原则性的设计思路”,很多人可能读完以后会觉得很空洞,但真正在研发过程中,真正有价值的反而是这种看似空洞的指导思想和思路。——不信,可以尝试从零做做看,你就会发现,你真正需要的是什么了。

上一篇主要讲了几个原则:

(1) 一定要MVC架构,这个MVC架构不是说那个诸如PureMVC那种框架性架构,而是指的剥离“流程图形”“流程模型”“控制器”的设计结构,也就是eclipse gef中“Model-EditPart-Figure”这个架构。

(2) 玻璃板技术,外围拦截鼠标键盘事件,进行处理。

(3) Command模式,来处理操作。可以轻松解决redo-undo。而且严格记住,你的command作用的对象是“model”,而不是“图形”。

(4) 使用Layer模式,将不同的图元放于不同的图层上。比如底层的Grid放在某个层,活动节点放于某个层,连接线放于某个层,拖拽的阴影放于某个层等等。

(5) 利用EditorEditorDomainSelectManager等等对象来维护针对当前流程的管理空间。这个在eclipse gef中是基本概念,不清楚的建议看看相关资料。

现在进入正题。

WorkbenchPartEditorPartViewPart

如果对Eclipse GEF/UI了解的话,看到这三个对象,你一定知道接下来要说什么。

对一个Flex流程设计器来讲,不仅仅只是流程图绘制这一块,你还需要涉及到一些额外的“视图(View)”,比如你可能需要显示当前流程图的OutLine,你可能需要显示问题列表,显示xml格式视图等等情况。借鉴eclipse gef/ui中的EditorPartViewPart设计思路,是非常不错的。




如上图,IEditorPart接口的实现代表一个图形化的设计区域编辑器,而IViewPart代表视图,其中每个ViewPart都会有一个Viewer,来表示真正的视图实现。注意,此处Viewer本身不是一个Flash DisplayObject对象,或者说不是一个Flex UIComponent对象,其内部的viewerControl才是表明此View的真正展示对象,比如是一个Tree,还是一个DataGrid,抑或是其他的UIComponent

IeditorPartIviewPart本身也不是DisplayObject,其仅仅表示这是一个View或者是一个Editor对象,索引一些资源。

看看IWorkbenchPart这个接口:

package com.primeton.framework.workbench { import mx.core.Container; import mx.core.UIComponent; public interface IWorkbenchPart { function createPartControl ( parent:Container=null ):Container; } }

这个接口允许把Parent Contaier这个Display Object传递进来构建,也可以不传递进来。EditorPart和ViewPart都必须实现这个接口方法,来初始化其所代表的Display Object实现。

今天写的少了点,赶明再接着写。

相关文章:

  • html5 涂鸦板
  • [IE编程] IE中使网页元素进入编辑模式
  • linux命令练习 笔记
  • [IE技巧] IE 中打开Office文件的设置
  • 配置系统未能初始化 错误的解决方案
  • [IE编程] IE中对网页进行截图的编程接口
  • c# 反射 遍历实体的所有字段,ObjectDumper类实现
  • Flex开发流程设计器的经验之谈(3)
  • 飞信分布式存储的结构
  • 使用Zoundry进行测试了下!
  • 使用HTML5制作游戏
  • [Web开发] IE 所有版本打包下载,网页兼容测试必备
  • c# LazyQueueT实现
  • Windows NT/2k/XP/Vista 管理员密码重置
  • c# 使用sharppcap实现 网络抓包
  • [译]Python中的类属性与实例属性的区别
  • 4个实用的微服务测试策略
  • Hexo+码云+git快速搭建免费的静态Blog
  • idea + plantuml 画流程图
  • Java 23种设计模式 之单例模式 7种实现方式
  • leetcode386. Lexicographical Numbers
  • markdown编辑器简评
  • react-native 安卓真机环境搭建
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • vue-router的history模式发布配置
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • vue数据传递--我有特殊的实现技巧
  • 微信小程序实战练习(仿五洲到家微信版)
  • 详解移动APP与web APP的区别
  • 一、python与pycharm的安装
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • !!java web学习笔记(一到五)
  • #图像处理
  • (1)STL算法之遍历容器
  • (70min)字节暑假实习二面(已挂)
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (规划)24届春招和25届暑假实习路线准备规划
  • (力扣)循环队列的实现与详解(C语言)
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (推荐)叮当——中文语音对话机器人
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .gitignore文件—git忽略文件
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .Net MVC4 上传大文件,并保存表单
  • .Net Remoting常用部署结构
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .net分布式压力测试工具(Beetle.DT)
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [android学习笔记]学习jni编程
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息