GanttApp 后记
过去的一周没给GanttApp(用于项目活动管理的软件,有图形控制界面。基于Dundas控件做的二次开发)添加新的功能,花了三天的时间对原来的代码进行重构(修改的力度让我觉得更像是重写)。对自己来说,这三天的工作像是一次教学实践。
在对用户需求(李sir经常让我替用户提需求...这真的很orz)和业务规则已经清晰后(可能所有人也只是现在才对开始软件的视图有个共识),调整对程序的设计。
1. 从行为相似的类中提取父类,在父类中用可重载的虚方法描述相似的行为。完成这一步后,无论在工厂中创建对象,还是在前台(图形界面)操作对象都通过父类中定义的方法实现,屏蔽了子类自维护的千奇百怪的数据结构(外部接口中传入的数据是由七种结构体类型定义的。每个结构体含八到十个类型以Datetime,string,int为主的字——超肥の作,但是很容易发现只需要定义一个结构体类型(Ok,如果非要用结构体的话~)外加一个字段就可以实现现在的需求。嗯,我在想是不是把题目改成“结构体惹的祸”更煽情...)
2. 在图形显示和数据操作之间加入DataManager类,分离界面操作(图形控制操作比较复杂)和业务数据。用户界面上有许多对业务数据的可视化操作,鼠标拖曳编辑活动属性(譬如起始时间、结束时间)。引入DataManager可以处理图形操作导致的数据变化,内部对相关的业务数据做出响应。
3. 用代理实现不适合相互依赖的类间的动作。在编辑活动属性时会遇到这样的情形:优先级高的活动A的时间被调整了,依赖与A的活动B,C,D的时间也须相应变化。让活动A逐一通知B,C,D显示不合适(A会想,有个大喇叭就好了——通信基本靠吼嘛:),交给代理,B,C,D爱怎么做不管了(确实也管不着)。
主要就这些,合理的命名等等的重要性不言而喻了。下周会着手另一个项目,期待中...