项目里面自从实现了把对象直接绑定到GRID上后,OOP一下子成了解决任何问题的良方:当系统启动的时候,把所有在软件运行过程中要用的数据全部以对象的形式持久化到内存里,显示界面的时候,调用这些对象来显示,打印报表的时候也是调用它们,一下子就解决了转存一次数据库后,引起的精度误差,实现了真正的表里如一。但是OOP有时候也会碰到麻烦的事情:比如说有两个对象要进行一些比较,但是现在的GRID上只支持一行绑定一个对象,于是我们又进行了进一步的封装比如说叫:TDoubleObject,里面封装着两个对象及公布了一个两个的比较结果的属性。通过RTTI也是一样可以把它绑定到GRID里去。因为对象类型的多样性,如果是要把比较结果的那个属性用多态来实现,那这个工作量简直像天文数字,而且有时候,还要在运行过程动态地改变比较计算的算法,这时候多态一下子就不能胜任了。
于是我又抓住了回调这根救命草:TCalcEvent = funtcion(A, B: TObject): Double of object,在运行过程中,可以通过动态地赋这个计算的回调函数,很轻松地解决了这样的问题。回调就像是红警里面的多功能步兵战车一样:装入工程师变成维修车,装入大兵成了装甲车,装入……不过这样做一下子就破坏了封装,对象自己内部不知道自己的属性是怎么算出来的,完全依靠外界的这个计算函数。应该说没有一个方案是完美的吧。