重构关注点
- 遵循开闭原则
- 面向抽象设计
- 实现设备程序端可动态配置
重构的需求
领导想省事提出需求,将现有PDA程序修改为支持PC端由电器工程师根据实际的生产流程可配置,PDA程序在读取配置文件后动态生成导航界面。然后导航绑定的是PDA程序Dll里的界面。公司的综合赋码管理系统(CMS)作为服务器端对PDA暴露WCF服务,PDA在执行扫描操作后对CMS发起请求,CMS收到请求后匹配分析PDA的请求,分析完再返回执行结果给PDA。场景就是这样一个场景,PDA扫描条码的操作分:扫描一个码,扫描两个码,扫描多个码三种。领导让写3个界面,其实这正好可以抽象一下,相当于1个界面就能搞定;于是设计了一个扫描操作的基类窗体,把扫描的基本操作写在基类里,使用模板设计模式,扫多少个码的界面继承基类重用大部分扫描的处理逻辑。主要流程是PC端通过反射获取PDA程序的Dll里的窗体类列表,外部定义好PDA要展示的功能清单序列化成为Json格式的文件,PC端使用MTP传输到PDA上,PDA读取该文件来动态生成导航界面。
重构的过程
1)定义数据传输对象
using System; using System.Linq; using System.Collections.Generic; using System.Text; namespace ehsure.Core.Data.dto { [Serializable] /// <summary> /// 主界面菜单实体类 /// </summary> public class DesignConfig { /// <summary> /// 界面宽度 /// </summary> public int Width { get; set; } /// <summary> /// 界面高度 /// </summary> public int Height { get; set; } /// <summary> /// 界面下所有控件 /// </summary> public List<ControlsConfig> ControlsList { get; set; } } }