面向对象建模与数据表建模两种分析设计方法的比较

要谈方法,这个世界其实只存在两种:一是将复杂问题简单化的方法;一个是将简单问题复杂化的方法。 你使用什么样的方法,你就有什么样的世界观,就是什么样的人,但是对于软件这个领域,你只能选择前者。


http://www.jdon.com/mda/oo_relation.html

http://www.jdon.com/mda/oo-reltaion2.html
[该贴被admin于2008-04-15 18:17修改过]

很重要的总结!

banq关于对象建模的文章和讨论发了不少了,也看了不少。
由于本人原先一直是采用DB建模的,两三年前看总觉着banq是有点“过”了。近年OO水平上来了,才体会到banq的苦心。大家的确是应该转到OO建模了。最近对两年前做的一个系统进行大规模重构,才体会到OO的巨大优越性。现在主要是在各种类的关系中转来转去,相当方便直接,已经很少考虑DB了。

补充一点,DB建模像建筑系统,难以适应变化发展;OO建模则像生物系统,能够适应变化发展。而应用软件主要是与社会生活相关,所以软件发展到今天,的确是应该返本还原,用OO的方式进行建构。

顺便提一句,Java是坚定的OO技术,大家要用心领会。

多谢。

其实这些思想在"建模重要性"等帖子里都充分讨论,而且这些想法不是我一个人想法,很多老外书籍都已经早提出了,我也是最近无疑看到2001年一篇老外的DataBase UML文章进入看看,当时好奇,都OO建模了,老外也有不同意见,继续捍卫DataBase?其实,这篇文章首先肯定OO UML is on the top of Database UML的,但是ER数据库建模也还是可以需要的,但是不能上升到业务需求分析这个层次了。

很多人确实接受不了这个转变,因为这样原来数据库设计和E-R模型设计好像都没有用了,其实我也不想在这里和他们争论,因为不是我一个人水平能够说服,而且我也不是老外,只要他们去买本EvansDDD 中文译本看看就可以了。

我的很多想法是从实践中思考得到,如果能够找到老外的理论支持,才会正式发表出来,这方面越来越慎重了,否则吃不消砖头啊,从严谨角度看,虽然我一直在帖子反复说不要用数据库/数据表分析需求,但是一直没有这方面OO和数据库E-R在分析方面的比较文章,这样,才参考老外2001文章和自己心得,补充这篇文章,表示J道这方面想法是全面的,从理论到实践源码。

建模重要性
http://www.jdon.com/article/17706.html

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

DB建模像建筑系统,难以适应变化发展;OO建模则像生物
系统,能够适应变化发展。而应用软件主要是与社会生活
相关,所以软件发展到今天,的确是应该返本还原,用OO
的方式进行建构。


这个比喻太贴近本质了.

-----BEGIN PGP SIGNATURE-----
Version: PGP Desktop 9.0.5 - Enterprise license

iQA/AwUBRvnKZ0xMLcoVi7ZyEQLNKwCdFG1oKG3rLPcBTbPYqq9kBtbYKZEAn0PB
NBdNybt/3ytBwZ+7yJSMnBb0
=CbMF
-----END PGP SIGNATURE-----

数据库建模是特定时代背景下的一个产物,当时确实具有相当的生命力,很多小系统都是两层的架构,分析设计的时候也就直接进行数据库建模了,开发速度相当快,而且因为系统小,业务不太复杂,也确实可以满足当时的需求。但是从系统的层次性,条理性来说也是不太合理的,直接导致了系统的扩展性,可维护性很差,这也被后来快速变化的需求的出现而提出的可扩展性,可维护性要求而证明了这一点。

面向对象建模正是在这样一个背景下而提出,就是为了改善系统的层次性,条理性,从而提高扩展性维护性等属性,快速应对市场需求的变更。但是现在还是很多人很难拐过这个弯,还在执着地进行数据库建模。下面我想从两个方面说一下我的观点:

一、从基本概念入手
因为我们是做企业应用系统,它是一个信息系统。这里要涉及到好几个概念:信息,系统,信息系统。所以,先来了解一下信息的概念,信息是经过加工处理的数据,数据是信息的载体。什么是系统呢?系统是由两个或两个以上的要素按一定的结构组成的,具有特定功能的、并和环境发生相互作用的一个整体。现在就比较好理解什么是信息系统了,信息系统就是数据的收集,存储,加工处理数据以获得信息,信息的流转,信息的发布的一个动态过程。它的要素就是这几个动作,一定的结构就是这几个动作的逻辑顺序,特定的功能就是它的数据的处理并以信息的形式发布的功能,环境就是人和外部系统了。从这个概念本身看,它其实已经是逻辑层次很清晰了,各做各的事,不能搞混了。数据的收集就是用户录入界面,我们所说的WEB交互层,数据的存储那就是数据库该做的事了,数据库是一个以某种有组织的方式存储的数据集合,从概念出发就定位了它的角色只是存储数据,而不应该是做其他的事情。加工处理数据获得信息那就应该是我们说的业务逻辑层应该做的事情了,这一层正是我们要进行面向对象建模的层次。信息的流转是工作流系统应该做的事情,而信息的发布应该就是报表系统所应该做的事情了。现在不是在讲建设和谐社会吗?那么,什么才是和谐呢,我觉得就是和合两字,和就是和睦,互不干涉内政,各自做好各自本职的事情,合就是合作,互相尊重的前提下交流。做软件其实也一样,要和谐的话就是使各层做自己的东西,不要越权伸出手去搅乱别人的工作,然后再谈合作的事情,这样做出来的软件才是比较好的。

二、从软件设计的角度入手
企业应用系统其实就是把手工的系统映射到计算机里面,也可以说是模拟,翻译。以前的做法是直接数据库建模,用二维的关系记录表来表达现实世界,慢慢地我们发现失真非常严重,因为直接这样做的话感觉落差太大,太直接,用二维的东西来表达三维的世界本身就是不得已而为之。中国人本来就是比较喜欢含蓄,以迂为直,呵呵。还记得我引用过一句话:“所有的软件设计的问题都可以通过增加一个抽象的间接层而得到解决或者得到简化!!!”从软件设计的角度讲,我们引入面向对象建模也就是在现实的系统和数据库表示之间增加一个抽象的间接层来减少这种映射过程中的系统失真!

以上仅是个人观点,欢迎批评指正!

killer的角度观点非常新颖易懂。多欢迎这样从自己角度思考的帖子,无论是否与其他人是否一致。

从信息和数据这个关系上看,现在很多人认为信息=数据,实际这就是简单化片面化了,信息不等于数据,中间还加了一层OO抽象,信息是三维的,可以运动的,而数据是静止的。

所以,信息化不代表数据化,或者数据库化。
[该贴被banq于2007年09月27日 11:09修改过]

我喜欢这JDon这种可以随意发表自己的观点的论坛,而不是一些天天都是骂来骂去的论坛.