2012年10月25日星期四

Ez看图重构,变化的开始

      Ez看图最初编写时只有一个大概的框架,是一步步在试验中成长起来的,因此导致内部模块划分不够细,每个类都很复杂。比如负责图片显示的类ImageViewer,连文件切换这些功能都要由它实现,不同功能的代码混在一起,难以理清头绪,维护起来也比较困难,容易忽略某些条件,引入bug。
      于是一直想着要进行重构。刚好国庆几天回家有空,就先进行了大略的改写,开始的思路是把文件管理的部分归到一个独立的类PicManager中,作为ImageViewer类的一个成员,这样可以维持ImageViewer的接口不变,通过简单的Adapter模式调用PicManager的功能。修改起来也很简单,很快就完成了。
       但后来一想这样还是要多维护一些代码,而且也不是很干净,于是再次进行重构。这次把ImageViewer作为基类,就只是简单的图片显示功能,每次调用它的loadImage(Qimage&)函数传进一个图像,它就会显示出来,缩放、翻转等功能也都还是封装在里面,但没有了任何文件相关的功能,彻底干净下来了。PicManager类则公开继承ImageViewer,负责管理文件,实现文件切换等,同时如果有动态图片则定时刷新。这样接口还是原来那样,除了这两个类别的几乎不用改,但却使得功能清晰下来了,代码也容易阅读了许多。
       另外为了更好地封装不同图片格式的区别,我引入了一个新的类ImageCache,里面记录了图片的一些信息。每次PicManager读取图片实际就是获得一个ImageCache对象,然后提取其QImage成员,调用ImageViewer类的接口显示。这个类的引入也使得下一个将要实现的功能——图片预读取——的实现变得容易了。
        总而言之,这次重构把原来的ImageViewer类功能进行了合理的区分,代码也整洁了许多。下一步还要继续重构MainWindow类,让整个程序更简单,更合理。

       体验新版Ez看图可以:点击这里


文档信息