首页 Soft PlugIn RAN乱 Dev开发 Info资料 English WAP 留言 登陆 注册
-
Posted by Yippee | 评论(2) | 引用(0) | 阅读1660次
面向对象设计模式疑惑

经历过九年义务教育的人,如果对于历史有那么一点兴趣的话,自然还记得当年中央红军五次反围剿的经历。为什么第四第五次会失败。关键在于指挥人员李德完全的教条主义指挥。

做了这么多年的软件,心中总是有些疑惑,例如代码的重用。基本上数据库的操作都是增加删除取值。前一段用了一下O/R MAPPING。发现不是很舒服。

最近做一个新软件,又重新思考了一下这个问题。所谓O/R就是用面向对象的方法来进行数据库开发。

例如,平时一个表,最简单的方法就是直接界面按钮进行操作,增加一个就是一条INSERT语句,删除一个就是DELETR语句,窗体启动的时候一条SELECT语句获得。

如果按照对象的方法,那么我应该首先针对表设计一个类,属性分别对应各个字段,然后定义几个方法用来对应增加删除方法。

当然如果按照时髦的方法 三层 ,那么我应该再定义一个数据操作类,专门执行数据库操作,然后再上面那个类中调用这些方法。

OK,如果这样,那么我的代码就是每次

从数据库取值,放到类中,窗体再从类中取属性,然后再复制给控件

也就是说同样一个给用户的使用,我最终多了好几个手续。

这样实现有几个问题:

1、代码量增加了 这是显而易见的

2、维护升级麻烦了,

如果加一个字段,以前我只要界面加一个对应的控件,SQL加一个参数,数据库加一个字段。

现在增加为 类加一个字段,对应的赋值、取值都增加一遍。

并且,如果需求变化一下,例如以前的方法是取所有的参数,现在我要取所有的个数,那么又得增加一个方法。

所以我实在不是很明白。所有的这些,都是基于一个面向对象。

以前看到一个文章,用设计模式来构造软件,好像是 孙超?一个大型软件公司的??

举了一个SWITCH的例子,这几天正好做一个大SWITCH,所以再次好好研究了一下这篇文章。

首先他说了一下优点,好像没有什么实际的东西,就是说这个改造面向对象啊,怎么怎么好啊

对应我这个土人,我实在看不出什么好。

一个简单的SWITCH(INT),他做了两个接口,两个处理类,两个实例类。也就是说,本来五行代码的东西,他翻倍几次。

至于他说的如果扩充方便,我觉得言过其实,例如本来增加一个对应处理,加一个CASE搞定的东西,象他这样,得再写一个类,同样还得进行实际操作。

并且例子是最简单的处理,只有一个INT,如果处理的参数信息再多一个,估计这个面向对象就的不知道扩充多少个接口了。

也许我实在不能当官,不能将简单的东西复杂化,只会将复杂的东西简单化。其实从以上的例子可以看出,面向对象就是把简单的东西复杂化。

我的思维方式是直线的,他们的思维方式是横的,就是我喜欢直接立竖的,就是按照用户的角度来看功能,而他们是从技术角度来分的。这就是根本性的不一样。

古龙说过,最简单的方法就是最有效的方法。同样的,数据库操作就是两个内容,一个是把用户保存的东西显示给用户看,一个就是把用户的变化给保存起来。那么归根结底就是读写数据库,既然如此,为什么不直接了挡了,何必脱了裤子~~

再说了,微软花费了那么多人力物力,最后推出来的也就是一个基本的接口,为什么不再进一步封装呢?原因就是需求是无止境的,不可能有一个更高级的封装达到需求了,从ODBC到ADO,基本上还是脱离不了SQL语句的执行,这就已经到了砖头级别。不可能再高级,除非就是你的需求非常明确,并且一段时间都会如此,那么可以封装再高一级,否则,我觉得没有必要了。


字体:

Permanant URI永久地址 http://www.shengfang.org/blog/p/designpattern.php
Trackback URI引用地址 http://www.shengfang.org/blog/tb.php?tb_id=1112794763

2005年4月6日21:39星期三  [Dev开发] 追踪此文的RSS
笑嘻嘻在 2005年7月13日00:10星期三 评论:
EmotionEmotionEmotion

Phoenix在 2005年6月1日10:05星期三 评论:
对于这个问题,我也考虑过.
面向对象确实可以让程序设计更简单,更符合人的思维. 但是,所有的面向对象程序都要面对同一个难题: 数据持久性.  在开发数据库时犹其突出. 如果你要用面向对象的方法来设计数据库应用程序,那么必须在所有数据类的实现中加入数据持久的方法.这确实是增加了代码,并且提高了对程序员的要求--你必须至少懂得各种SQL的语法. 目前OR Mapping的流行,也即是为了减少这种不必要的麻烦,预先把数据库的各种操作抽象出来. 不过,这样一来,又多了样东西要学...而且,OR Mapping对复杂的SQL操作还不能完美的实现. 对于我们已经习惯了用SQL的人来说,这真是脱xxxx.Emotion
Yippee 回复于 2005年6月1日10:34
也许我是小项目做多了,多少东西都是一个人或者两个人。人家大项目人比较多,所以可以指定专门一个小组做OR这一块,有什么复杂的SQL可以对应的实现。不过我还是觉得这样不是很符合实际。还不如分成功能块,各个小组实现比较方便点。不过按照技术分组可能觉得这样代码比较完善吧,可以以后代码重用,虽然我觉得重用的概率不大,除非一个软件能够维持5/6年生命,还得保证这期间真正的底层数据访问技术如微软或者JAVA提供的ODBC/ADO/JDBC或者数据库如ORACLE/MSSQL等的接口技术不产生大的变动。

称呼:    登陆   注册
   不注册,但记住我的信息
邮件:
(非必须)
评论: [UBB代码帮助]
粗体 斜体 下划线 链接 水平线 引用



验证码: 请输入你看见的数字
关闭UBB      提交时自动将内容复制到剪贴板

公告
Fire and Motion!

统计信息
[Yippee]||[统计]||日志:1790
在线: 9||用户: 2563 [列表]
今日:490||到访:2682129
Rss:841902||评论:1585

最新日志

最新评论

友情链接

日历

最新引用

搜索

归档

杂项
Get RSS Feed (Version 2.0)
Get Atom Feed (Version 0.3)
编码:  UTF-8