用了相同的元素。这里 的代码复用主要有三个手段,框架、控件、窗口继承。 还是举一个简单的例子,这次开发中的部门是按照树型结构来描述的,很多个界面上需要出现这个部 门树,比如资料管理界面、比如人员管理界面,界面的左边都是这颗部门树。在不同的界面中又有不同的 处理,相应不同的事件。这方面,Delphi 为我们提供了一个好的方法:Tframe。我更倾向于认为 Frame 就 是一组控件及相关代码的集合,虽然在设计时它和 Form 比较相似。在部门树这个 Frame 中,只有一个 Treeview,关键在于它已经具备了按照树型显示部门能力,而且,更进一步,你可以在其上面进行拖拽来 完成部门调整的功能。当然对于不需要这个功能的窗口,可以简单的设置一个属性来禁止这个功能。 框架被程序员了解后得到了大量的使用。大家感到确实能非常方便的解决很多问题。而且,对于框架 的修改会被所以使用它的窗口有效,不用因为要修改某个共同的地方找遍工程中的每个窗口了。 在
Delphi 推出 Tframe 之前的版本,可以使用窗口来代替它。其中的区别不在本文中讨论了。 控件无疑是 Delphi 最令人心动的了,在眼花缭乱的无数控件面前往往会迷失。控件和框架的作用有相 似的地方,不过普遍认为控件更加通用一些,而框架只是用在特定的程序中。如果团队中拥有擅场于此的 高手自然能让团队如虎添翼,没有也不必黯然神伤,因为普
通的控件编写也没有想象的那么难。 同样举一个简单的例子。这次开发使用了 Ado 作为数据联接,adoDataset 有 sort 属性,可以完成本地 排序的功能。大家知道许多优秀的 Dbgrid 控件都能实现点击标题栏自动排序的功能。我们也做了一个增强 的 dbgrid 来实现这个功能,利用 ado 的特性,非常简单,几句代码就可以了。当然还有其他增强,来适应 这个专业系统的其他方面。 窗口继承的使用也是令人兴奋的。使用这个方法,是把系统中类似窗口的行为写到父类的窗口中,子 类窗口从父窗口继承。也就能直接具备了父窗口的行为。不过后来我们发现,使用这种方式,说是要代码 复用,其实更多的是用在多态性上。因为界面的相似之处提炼成框架或控件,代码的相似之处变成了函数 或者对象。在父窗口中基本就只剩下些虚方法了。 以上总结了笔者在领导团队开发中关于代码复用的一些思考和实践,虽然在《人月神话》中作者断言 面向对象方法不是解决
软件问题的"银弹",但我仍然认为面向对象方法应该成为程序员的基本功。特别的, 面向对象方法能够给团队的合作带来非常大的遍历,毕竟,如同早就有人在 C 与 C++的比较中,C++更适 合于 50,000 行代码以上的系统中。随着软件系统应用的不断升级,大多数系统会轻松突破这个值。我们 统计表明,这次系统代码量在 60,000 左右