这篇文章主要是对之前做过的一个UI简易框架(我也不确定能不能算框架,毕竟不是很完整,姑且就叫框架吧。)的总结,计划分3-4片写完。
其实这个框架并没什么技术含量,完全是一种个人总结性的记录,但是我还是会比较详细的记录一些设计思路和开发细节,希望能能够抛砖引玉,我也会继续把她完善好。
最初开发UI框架的想法源于对代码中大量粘贴复制动作的疲劳性抵触,一想到实体与界面控件的赋值(取值)、每个实体窗体的新增修改等业务状态的控制就烦,于是一开始就以简单易用、去繁就简为目标,实现的功能也确实非常简单,因此叫简易框架。
想虽然简单,但是真正动手前还是做了很多功课,读了SharpDeveloper和SmartClient_SOA(codeproject上的一个开源项目)代码。SharpeDeveloper显然太庞大,所以指抄袭改写了其中的Workbench的概念和插件体系(后来发现总用不大去掉了)。
1、 UI布局
UI框架的整体布局模仿Outlook样式,如下图:
最上面是菜单和业务功能的快捷按钮;
左侧是一个手风琴菜单,用于显示业务功能菜单,每个菜单项指向一个业务功能;
右侧为客户区,显示菜单项对应的业务窗口,它可以以MDI或SDI两种风格显示业务窗口(组件),业务窗口(组件)可以是网格、实体编辑窗口(组件)也可以是其他任意自定义组件;
右侧下方可以显示一个通知区,用于对客户显示区的补充;
2、 UI组件类设计
通过对常用UI组件的抽象,框架把UI组件分成以下几类:业务控件类和容器类及调度类;业务控件类主要有实体控件类组件、网格类组件、其他显示于客户区的组件;容器类则是用于提供对SDI和MDI的支持;调度类用于处理调用关系;
2.1 工作台类(Workbench):就是主窗体,负责显示手风琴菜单,处理菜单指令和根据需要显示、维护客户区的组件。
2.2 业务窗口类(ViewBase):Workbench的一个客户区显示项就是一个View,所有的客户区控件都继承自ViewBase,Workbench会为每个客户区组件(View)自动创建相应的容器以便把他用合适的方式显示到客户区,由于不同的业务功能可能会有各异的业务动作(菜单或快键),因此他具备自定义菜单能力。
2.3 网格类控件(GridView):一个用于显示多行数据的客户区组件,它继承自ViewBase,实现网格数据的绑定,新增、修改、删除、审核(自定义)等业务动作的调度。网格类控件可以自定义网格列、排序、列次序、条件样式等。
2.4 实体控件类(EntityControl):继承自UserControl,主要用于实现业务实体的用户界面,并负责界面到业务实体和业务实体到界面的数据绑定,这个控件可以同时支持单一实体和主细表实体;一个网格类控件(GridView)通常会在客户出发新增、修改等业务动作时调用实体控件类完成相应的业务功能。
写的有点乱,忽然发现想说的太多,又不知道从何说起,表达能力太差了,大家将就看吧,希望通过博客园能提高我的表达能力,阿门。