经历过九年义务教育的人,如果对于历史有那么一点兴趣的话,自然还记得当年中央红军五次反围剿的经历。为什么第四第五次会失败。关键在于指挥人员李德完全的教条主义指挥。 做了这么多年的软件,心中总是有些疑惑,例如代码的重用。基本上数据库的操作都是增加删除取值。前一段用了一下O/R MAPPING。发现不是很舒服。 最近做一个新软件,又重新思考了一下这个问题。所谓O/R就是用面向对象的方法来进行数据库开发。 例如,平时一个表,最简单的方法就是直接界面按钮进行操作,增加一个就是一条INSERT语句,删除一个就是DELETR语句,窗体启动的时候一条SELECT语句获得。 如果按照对象的方法,那么我应该首先针对表设计一个类,属性分别对应各个字段,然后定义几个方法用来对应增加删除方法。 当然如果按照时髦的方法 三层 ,那么我应该再定义一个数据操作类,专门执行数据库操作,然后再上面那个类中调用这些方法。 OK,如果这样,那么我的代码就是每次 从数据库取值,放到类中,窗体再从类中取属性,然后再复制给控件 也就是说同样一个给用户的使用,我最终多了好几个手续。 这样实现有几个问题: 1、代码量增加了 这是显而易见的 2、维护升级麻烦了, 如果加一个字段,以前我只要界面加一个对应的控件,SQL加一个参数,数据库加一个字段。 现在增加为 类加一个字段,对应的赋值、取值都增加一遍。 并且,如果需求变化一下,例如以前的方法是取所有的参数,现在我要取所有的个数,那么又得增加一个方法。 所以我实在不是很明白。所有的这些,都是基于一个面向对象。 以前看到一个文章,用设计模式来构造软件,好像是 孙超?一个大型软件公司的?? 举了一个SWITCH的例子,这几天正好做一个大SWITCH,所以再次好好研究了一下这篇文章。 首先他说了一下优点,好像没有什么实际的东西,就是说这个改造面向对象啊,怎么怎么好啊 对应我这个土人,我实在看不出什么好。 一个简单的SWITCH(INT),他做了两个接口,两个处理类,两个实例类。也就是说,本来五行代码的东西,他翻倍几次。 至于他说的如果扩充方便,我觉得言过其实,例如本来增加一个对应处理,加一个CASE搞定的东西,象他这样,得再写一个类,同样还得进行实际操作。 并且例子是最简单的处理,只有一个INT,如果处理的参数信息再多一个,估计这个面向对象就的不知道扩充多少个接口了。 也许我实在不能当官,不能将简单的东西复杂化,只会将复杂的东西简单化。其实从以上的例子可以看出,面向对象就是把简单的东西复杂化。 我的思维方式是直线的,他们的思维方式是横的,就是我喜欢直接立竖的,就是按照用户的角度来看功能,而他们是从技术角度来分的。这就是根本性的不一样。 古龙说过,最简单的方法就是最有效的方法。同样的,数据库操作就是两个内容,一个是把用户保存的东西显示给用户看,一个就是把用户的变化给保存起来。那么归根结底就是读写数据库,既然如此,为什么不直接了挡了,何必脱了裤子~~ 再说了,微软花费了那么多人力物力,最后推出来的也就是一个基本的接口,为什么不再进一步封装呢?原因就是需求是无止境的,不可能有一个更高级的封装达到需求了,从ODBC到ADO,基本上还是脱离不了SQL语句的执行,这就已经到了砖头级别。不可能再高级,除非就是你的需求非常明确,并且一段时间都会如此,那么可以封装再高一级,否则,我觉得没有必要了。 字体:大 中 小 |
![]() | 永久地址 http://www.shengfang.org/blog/p/designpattern.php |
![]() | 引用地址 http://www.shengfang.org/blog/tb.php?tb_id=1112794763 |
2005年4月6日21:39星期三 [Dev开发]









