请教建模的问题,如实客观世界时的性能问题

07-11-07 hundred007
有一个建模的问题请教,看多了banq大哥的论坛,设计系统时就会想着面向对象而不是面向数据库,但每次都发现面向对象实现起来总是有很大的抗阻,担心性能和工作量的问题。

现在举个具体的例子,

给展会系统建模,主要有几个实例:展会定义,展会实例,展期,展馆,展区,公司。它们的关系可以从图1看出。

比如展会定义是广交会,展会实例是具体到某某届的广交会。

如果按照对它们关系的正确反映,我的分析是图3。

在真正的业务中,展会实例和公司是最重要的两个实例,其次是展区,再到展期, 展馆。

会有大量这样的操作:

1,通过展会实例找出公司,

2,通过展区找出公司

如果真的按照这样的关系建类,问题就来了,性能应该是比较差的,而且类与类的间接关系太多,查找起来比较费力,展会实例找出公司要先找出展期,再找展区,再找子展区,才到公司。

考虑到展会定义,展会实例,展期,展馆,展区,公司之间的关系基本上是最少改变(基本不会出现这个展期改到另一个展会实例,这个展区改到另一个展会),为了提高性能,加了几个关系的冗余,同时把展期, 展馆弱化,以增加维护它们之间关系的复杂度来换性能,同时,多对多的关系,用中间对象来拆分。如图2:

是不是又回到面向数据库的旧路了?其实我的困惑就是怎么样才算是面向对象,怎么样才算是面对数据库。虽然看了banq大哥很多的建模方面的文章,但真正实现起来却不是分析的那么简单,除非不考虑性能和工作量。

大家说说这个例子怎样设计最合理,当然要考虑性能的问题,希望能把复杂的问题简单化,忽略不会变的东西。

         

hundred007
2007-11-07 16:28
再补一张图


banq
2007-11-07 23:04
》其实我的困惑就是怎么样才算是面向对象,怎么样才算是面对数据库

这是很多人的困惑,因为我们教育背景中没有关于OO知识,就象没见过骡子的人,怎么知道骡子和马的区别呢?所以,必须深刻掌握丰富的OO知识,如模式 DDD等等。就象你对数据库知识那样深刻,甚至成了自觉。这是一个全新重新学习过程,而且必须排除以前数据库经验的干扰,更是难上加难。

OO建模是负责将客观世界模型映射到软件世界,至于软件世界的代码性能问题,则不属于OO建模问题,属于架构问题,这方面Java有足够丰富的架构技术来提升性能。

具体你这个案例,有几个OO建模要点需要掌握的是:

1.使用OO的目的是简洁直接,低关联是一个要点,多对多关系几乎毫无意义,关系多了就没有关系,所以,一看你的图如果是蜘蛛网,那就说明耦合难缠的种子就被种下了。

2.DDD建模建议结合设计模式来分析设计,明显,你这个应用中,展会 展区 展馆 公司是一个树形结构递归关系,这可以使用GOF模式中组合模式实现,具体案例可见 estore的演示效果,可以自定义类别节点,这是一个组合模式实现:

http://www.jdon.com:8080/estore/

3. 对于复杂项目,DDD建议我们找出核心子领域,那么展会实例和公司应该属于核心子领域,围绕这两个核心实体模型,找出其他实体,注意,在这个过程中,别范数据库的毛病,就是把本来表示关系的概念使用对象/数据表来表达.

你的图中展会定义 展会实例 展期 展区都要根据需求重新定义,是否需要这些对象,他们的性质是否都属于四色原型中的PPT,表示某个地方,如果是这样,围绕公司只需要一个位置对象来标识其展区位置即可,至于展区展馆之间的分类是一个树形结构,和核心模型没有关系。

划分出重点,找到核心,排除干扰,就能实现OO系统,这些都是很普通的做事方法。OO就是这样自然。

希望对你有帮助。

hundred007
2007-11-08 13:32
谢谢banq大哥的回答,

》至于软件世界的代码性能问题,则不属于OO建模问题

在OO建模是不是也要考虑代码性能问题呢?

有些原理还是知道的,因为看了不少banq大哥推荐的书和文章。但还是不能很正确地运用。之前的文章都是一些理论性的东西,没有一些比较复杂的例子的介绍。banq大哥能不能结合这个具体的例子给出一个比较具体的答案呢?就是类与类之间的关系。现在还是比较模糊。

我说的例子就是广交会的官方网站,

http://www.cantonfair.org.cn/

banq
2007-11-14 15:31
>在OO建模是不是也要考虑代码性能问题

建模和架构是两个方面,代码性能属于架构方面考虑的事情,可以通过适当框架来提供性能的可伸缩性。

>没有一些比较复杂的例子的介绍。banq大哥能不能结合这个具体的例子给出一个比较具体的答案呢

这方面Evans在其DDD书籍中比较多,其网站也有不少案例心得,我也可以企业上门进行培训咨询。

猜你喜欢
6Go 1 2 3 4 ... 6 下一页