OOP程序设计实践

·简介(开发中)

前言
    phoenix,浴火重生的凤凰。和她的名字一样,这个版本的热键助手是一个全新的热键助手。虽然她“长得”和以前的版本差不多不过她已经实现了程序的全部重写。
    应当说phoenix版本是“热键助手”的降级版。在以前开发“热键助手”的时候,按照自己的喜好加了很多功能。然而在实现了这些功能以后,却发现真正使用这些功能的人其实并不多。这次开发的出发点是实现基本的功能,在用户需要时再根据具体情况添加。
OOP
    其实这次重写“热键助手”主要是对OOP的实践。在以前写程序的时候总是喜欢把不同的功能放到不同的单元中,把不同的功能放到不同的函数中……。当时感觉这样写程序就已经很帅了,但始终感觉没有摸到OOP的门。然而就在最近开始有点OOP的感觉了,于是决定将“热键助手”进行一次重写。
    重写的过程中问题还是不少的。
    在设计的过程中颗粒细度始终很难把握。因为是初次使用OOP的思想来做程序,在划分模块的时候经常“狠不下心”,老是希望把颗粒划分得比较细,舍不得将颗粒画粗点。不过根据XP的说法,不应当在程序设计的初期把程序设计得太“完美”,因为你的能力会在设计的过程中提高的嘛。一些东西以后做也许会做得更好,而且现在计划的很多东西在以后可能会变得毫无用处,为什么要浪费这么多的时间来做一些无意义的事呢?而且只要前期的设计不要做的实在太烂,在后期还可以比较方便的使用重构来改善程序结构以适应需求的变化。
程序具体结构(还没完成)
    下图就是程序的类图,因为还没真正完成所以在最终实现的时候应当还会做写修改。
    下面还是对程序的结构进行一些讲解吧。(其实类图提供的信息已经蛮详细了)
    TvxShortCut类对热键(TvxShortCut)进行统一管理管理。在TvxShortCut有一个TvxSettingMgr的引用,通过她来进行对设置文件的操作。TvxShortCut应当是一个抽象类(目前还不是),因为她没有和界面打交道的代码,她的界面相关部分将在子类中实现。
    TvxSettingMgr用于实现配置部分的功能。其实可以将其设计成一个接口。其具体实现可以由TvxXMLSettingMgr等实体类来实现。不过目前还没有采用其他配置方式的想法,所以先这样做吧,等到有必要的时候再考虑重构。
    TvxShortCut用于实现热键的注册和卸载等功能。TvxShortCut应用TvxScript执行热键操作。
    TvxScript对脚本进行分析,并调用TActionFactory来构造一个TvxAction接口的类来执行具体的脚本。(我觉得TvxScript这个类好像有点小问题,但具体怎么改还想不到,所以先这样用吧)
    TvxAction执行热键的具体操作。这是一个抽象类,她的具体实现在她的子类里实现。
    TvxMenuAction类,实现了IvxMenuInterface接口的Action类,可以将其添加到Menu上。这也是一个抽象类。
    TvxOpenFile类,TvxMenuAction的子类,用于具体实现打开文件的操作。
    IvxMenuInterface接口,添加到Menu的接口。
    TvxSubMenu类,有子菜单的菜单项目(分隔符也算到这里面,反正是和Action无管的菜单项)。
    TvxMenuMgr,具体将实现了IvxMenuInterface类的接口添加到菜单上。

    差不多就这样了。因为我也是OOP的菜鸟,设计方面还是很菜,而且自我感觉上面的类图还有不少问题,如果大家有什么好的建议欢迎指出来。
   

点击察看大图

类图(点击察看大图)

备注
    在设计的时候我也一直在象,我是不是将问题复杂化了。不过OOP的第一步始终要走出去的,所以就算是再硬的核桃也要将其砸扁。
    顺便祈祷这个程序可千万别夭折了,就算是再烂也还是写完先。(在接下来的一段时间里工作会很忙,不知道什么时候可以将程序写完)。

 

发表于 @ 2004年10月

//——————————————————————–

PS:

    很久以前的东西了。最初是放在我的个人主页上的,不过我的主页空间到期后就没有继续维护了(两年过得可真快啊)。这篇文章在CSDN也有,不过CSDN的blog在发完这个文章后就已经没有进行维护了。CSDN的blog上总共也就只有这一篇文章,差不多也算是废了。想想我还是很少写技术文章的(妖言惑众还是比较多的),这个文章虽然说写得不怎么样,但多少还是有点回忆吧。OOP走火入魔的回忆,当然这个走火入魔更多的带有一些刻意。 爱爱过才知情深,醉过才知酒浓。只有有过走火入魔的经历才能将问题看得更透彻。

    程序也早就完工了,不过最后的结构和上面的类图有些不同。

    程序的最新版本和以前的发布版本相比有些小改动,而且修正了一些内存泄露问题。只是中文版的程序在一次意外硬盘灾难中丢失了。E文版的还有,不过帮助只E文化了一半。现在程序的帮助还是一半E文,一半中文的。是否考虑那天将剩下的帮助也E文化后发布个E文版的?

    不知道怎么将MSN上传的图片插入到blog里,而且上传的图片会显示在“我的图片”里,不是很美观。所以文章中的图片是在网上拉的别人家,图片什么时候实效我就不清楚了。

打算再玩一个月的Delphi

    总是觉得JAVA实在是有些枯燥。面对JAVA,你需要不短的去熟悉那些所谓的新技术和那些所谓的框架。一通百通?通了有个鸟用。熟悉很多时候不是通不通的问题,差不多是纯粹的苦力活。反正我是试图慢慢的让自己专注起来,不再去过多的关注那些所谓的新技术,把关注的焦点放到框架的整合上面。
    APPFUSE是个不错的东西,他引入了不少新技术,而且做了一个还算不错的整合,而且还提供了一个简单的代码生成器。不过如果直接使用APPFUSE进行开发还是会存在一些问题的。比如在APPFUSE中的权限控制部分和框架整合的过于紧密。但对公司目前的项目来说APPFUSE带的权限控制模块还不是很符合要求。在页面的表现部分,APPFUSE是用CSS对页面进行装饰来实现表现层和功能的分开。技术是不错,不过着对CSS的要求有点高。要实现所有页面都使用CSS进行装饰技术难度有多少?呵,我对CSS不熟不好估计,而且我从来都对脚本语言存在着一些偏见。表现层这一块肯定是要进行剥离的。除此之外APPFUSE在一些问题的处理上本来就不是很好,需要进行部分的修改。
    APPFUSE带了一个代码生成器,还算是简单实用的。不过在我看来从VO提供的信息毕竟不够完备,如果从VO开始实现一个完备的代码生成过程似乎还存在着一些问题。在我看来,进行代码的生成最好的办法就是从自定义的XML文档开始。因为文档是自己定义的,所以需要哪些信息你可以自由的进行添加。
    代码生成器,在以前玩python的时候写过一个简单的。完成了从配置文件生成VO、文档、以及数据库安装脚本。再由XDOCLET生成hibernate的配置文件。不过由于在开发的过程中遇到了点小问题,加上对python的兴趣减退(开发这个主要是为了玩python)就没继续开发了。
    代码生成器的理想情况是可以由模版生成页面,数据库脚本在生成后可以选择自动安装。程序的相关代码也是完备可以用的。程序的相关配置文件也是要全部配置好的。总之就是写好配置文件,然后你就不用动手了。呵呵,听上去似乎有些恐怖。不过对于简单的添加删除操作来说,编程本来就是一个体力活而不是技术活。
    YY了这么多东西,不过就目前而言我还有几个简单的问题都没有处理完。比如spring和hibernate整合的事物控制。hibernate的那几个对应关系等(感觉对应关系的处理不会很难,但一旦没处理好,很容易出性能问题)。
    虽然JAVA方面还有怎么多问题没有解决,但我还是打算先再玩一个月的Delphi了。在公司一天到晚的对着JAVA难免有些厌烦。况且我本来就更倾向于Delphi。如果从刚接触Delphi开始算起已经有超过4年的时间了。虽然Delphi已经有日暮西山,虽然Delphi已经开始win32向.net转变,不过我依然喜欢用delphi进行win32下的开发。不知道是不是用久了就成了一种习惯?
    呵,虽然delphi玩了蛮久的,不过在工作中用delphi开发的时间却不算长。
    不管怎么说,再玩一个月的Delphi,把那些该解决的问题解决(本来早就该解决了的,计划不如变化啊)。

J2EE真的很低效?由ROR概念上的流行想到

    ROR似乎是在一夜之间走红的,CSDN有事没事就要出些关于ROR的报道。ROR似乎成了一种时尚,似乎ROR就是终结J2EE的那颗银弹。
    今天你ROR了没?
    我不否认ROR在一定程度上可以极大的提升WEB开发的效率,但很明显在目前ROR使用价值还很值得商讨。从项目的角度来说一个成熟稳定的开发框架是很必要的。采用ROR这个缺乏商业支持的东西确实很需要勇气。
    在我看来一个东西要简单就必将削弱自己控制力(隐藏部分特性也可以)。比如JAVA的简单是靠牺牲了不少C++的特性换来的。ROR给你自动化了不少东西,同时也削弱了你对程序的控制力。自动化的好处是如门容易,因为他为你处理了很多问题。但同时真是因为自动化的问题,他将很多问题给封装好了。但如果你需要一些更高层次的使用,你必须去了解他的机制,去了解如何避免因为过分封装所带来的问题。
    与ROR相对应的问题,JAVA真的很复杂?
    JAVA技术名词的数量应当是其他开发语言所很难比拟的。但你真是需要去了解这么多东西?其实JAVA的复杂过多的来源与其表象与厂商的利益。
    新技术是永远也追逐不完了,其实你要做的仅仅是将目前常用的几种JAVA技术整合一下,要寻找一个合适自己的开发框架而已。
    在一个完善合理的开发框架搭肩起来后,开发效率是绝对不会比ROR慢多少的。
    目前现成的开发框架中比较有名的APPFUSE。按照理想的开发模式APPFUSE的开发效率应当和ROR相当(ROR的开发效率也是被理想化的)。
    让我们再回过头来看ROR到底做了些什么?ROR就是做了个类似JAVA个种技术的整合工作。
JAVA却的是什么。JAVA缺的就是一个将各种JAVA技术整合到一起的整合方案。APPFUSE不错,但在不进行的情况下使用到系统中依然会存在不少问题。
    JAVA为什么没出一个类似ROR的整合框架?也许又是因为厂商利益吧。
    ROR的思想很不错,但就其本身的价值表示怀疑。

推荐个项目管理工具dotproject

    将来,老是上网到处溜达,一点正事没做。所以决定找个项目管理软件给自己安排项目计划。找了不少,却一直没有找到合适的。

    XPlanner在sourceforge上活跃程度不错,不过我不是很喜欢JAVA的项目(工作中用多了,所以有点烦JAVA),而且界面也不是很帅。

    去找了一下一些PHP的项目管理软件。在好友的推荐下关注了一下EGroupWare.这东西的界面不错,不过功能太强大了。对于我来说我不需要这么强大的功能,功能过于强大只会增加使用的难度。

    看到cnpack用的CVSTrac,觉得不错.不过我用subversion做版本管理,去找一下发现CVSTrac有subversion的版本教Trac.Trac这东西用python写的,需要服务器支持python,好像安装会有点麻烦.而且后来发现这个东西只提供里程碑和bug管理不提供项目管理。

    这时候发现了dotproject。看名字还因为和.net有什么关系。但其实这东西是用PHP写的。dotproject提供了项目管理,bug追踪,而且还提供了一个论坛提开发人员交流。dotproject功能不错,简单好用,且界面很友好,十分符合我的要求。dotproject安装起来十分方便。在第一次使用的时候会自动弹出配置界面方你配置。dotproject有中文语言包.

 

pylucene

    前一段时间用python写了一个简单的代码生成器。说实话我还真没感觉到python有大家说的那么方便。不过python还是有些用处的,毕竟python的资源多啊。考虑做一个全文检索之类的东西。不过delphi下的搜索引擎还没看到哪个是可以用的(有个基于lucene的,不过是.net的)。发现pyhon下已经有了pylucene。通过特殊的编译工具可以将python编译成win32下的动态链接库。考虑研究一下,看看是否能用python写成动态链接库然后让delphi来调用。

 

PS:———-2006.1.1 3:xx:xx

   因为朋友的原因,最近关注了一下GCJ。发现pylucene就是用gcj将lucene移植到python下的。然后又回头去查阅了一下pylucene的一些相关资料。发现在我搜索pylucene的相关资料时,一片介绍用GCJ进行程序的移植的文章已经看过了,只是因为是E文的没仔细看,给错过了。

决定要做代码管理了

    用python写了个XML2DOC的小工具。结果很不幸运,一不小心被我给del了。找了个文件恢复的工具恢复了半天也只恢复出了两个文件(总共三个文件)。无奈只下只有重写了。还好工作量不是很大。
    还是拉一个subversion回去做代码管理好了,要不然以后再出现这样的事就不太好了。

发现python的资源还满丰富的

    最近开始玩python,打算用python写个代码生成器,其中设计到文档的生成问题。开始还怕找不到合适的开发包,随便上网溜达了一圈就给找到了。
   在我开来一个语言很重要的一点是第方资源的支持,在这点上python做的不错。
    不过昨天被python的中文编码的问题折磨的够呛,今天上网看了看,发现解决的方法都从我眼皮地下溜达过好几圈了。。。。