请教定单建模问题

banq大哥你好 ,上次你给我提示后我看了一下《分析模式》
现我把类图改了
Conversion:为两单位的转换
例如:糖 :1箱=10包,1包=20袋,则糖有两个Conversion
largerUnit:箱 largerUnit:包
smallUnit:包 smallUnit:袋
ratio:10 ratio:20

Orderline 定单行
Quantity 数量
QuantyConversion 数量转换
例如242袋糖转为1箱2包2袋

请问banq大哥这样设计有问题吗?







[该贴被sixiang3310于2007年09月21日 21:24修改过]

初步看不错,不过由于引入单位细节处理,模型显得复杂,整个图有些蜘蛛网倾向,这是数据库实体建模最容易范得毛病,我们需要避免。

需要关注重点,你的核心模型是Order OrderLine ,不要将换算类跨出Product范围,去和Orderline的属性Quantity发生关联。单位换算应该只限于Prodcut这个核心模型周围,因为单位确实应该是Product的一个属性。

虽然OrderLine中会有数量单位,但是这个单位是因为Product带出的单位。

所以,建模应该对主次以及属性归属(也就是聚合关系)进行确认。不能将对象属性和对象并列在一起,打个比喻就是儿子老子并列在一起,他们是一家的。

在管理系统中,有时由于企业有各种数据表单原因,在这些表单中,对象属性被打散了作为数据并列在表单项目中,因为我们不期望发明这些表单的人有对象意识,他们只是感觉需要那个数据项目就列出来,而我们分析时,则不能这样糊涂,特别如果按照数据表实体模型来分析,看到这些数据项目正好是数据表的字段,就以讹传讹,自以为拷贝不走样放应到软件中了,实际由于没有认识到表单后面的对象本质,最后整个管理软件系统从源头就陷入浮于表面,直至难以维护和拓展。

现在很多做管理软件的公司如金碟和用友,他们吹嘘ERP和SOA很厉害,真不知道他们是按照什么分析方法来做他们软件的,软件出生之时就畸形了,再加入什么时髦概念SOA,SAAS等,又都是浮华表面,能长久吗?


btw:楼主以后问问题需要接着上一个帖子,这样给别人浏览时,能够方便学习和讨
论。
http://www.jdon.com/jivejdon/thread/32716.html
[该贴被banq于2007年09月22日 10:43修改过]

先谢谢banq大哥,从j道中真的学到很多东西,我也希望自己能在j道的指引下和j道一起成长!


banq大哥 你说的不要将换算类跨出Product范围,去和Orderline的属性Quantity发生关联,这个我明白了。
可你说orderline 不应用数量单位,因为product中有这些单位
如果只是以箱、包、袋单个单位的入货或出货那当然是,可是系统要求
同时用到三个单位怎办?
例如甲从仓库中领了1箱+2包+3袋糖
如果不建立3个数量分别代表,那单用数字怎样解决呢?
(对了类图中的Orderline和Quantity应市1对多关系,我画措了)

是的,这个问题正是"分析模式"这本书这个章节提出的解决方案,引入Observation这样一个类,让Orderline只和Observation发生关联,并且引入phenomenon类型:






banq大哥,按你那样来说如对应的是人,那measurement对应的应是身高,体重.
category observation 对应的应是性别,血型等
那么我哪个问题应是
orderline---person
measurement----出入货数量
category observation -----product
是这样理解吗??????

我上面贴出这张图的解释:
比如:性别是一种phenomenon type, 男性和女性是category,为了表示一个人是男人,我们创造了observation ,它表示:phenomenon type是性别;category是男或者女。这些都是描述数量状态quantitative statement,都是和数量有关,怎么会跟product有关。

考虑你这个项目糖有1箱糖2包3袋,其实没有上面这张图复杂,你的数量单位性质只有一个,没有多个,所以,无需引入phenomenon type .

OrderLine只要和Unit发生关系就可以,Unit通过换算类可以换算为其他单位。在你的图中,QuantyConversion怎么得出我不知道,而且Unit怎么和Quantity有关系呢?一个订单条目有几个部分组成?商品+数量+数量单位,这些都是其组成部分,是一种聚合关系。


[该贴被banq于2007年09月24日 15:33修改过]

明白了!
banq大哥可能你对我的数量有点误解,我所说的数量是 数字+ 单位
<分析模式>中文版是这定义的
数量=数字+单位+相关的算术运算操作
所以我的quantity才和unit有关联
现我已把QuantyConversion去了,把换算功能放在conversion

感觉楼主是在为了领域设计而领域设计,不是为了解决问题而领域设计。
这么学效果不大。
建议你做一个实际的东西,就算是一个作业也好。
作下来,就有些体会了。

最重要的是,不要指望一下子就能学会领域设计。
Eric Evans 是聚集了20多年的经验,尚且在书中说无法确定最好的方法。
所以不要一步求成。

有的时候错误也是一种宝贵的财富。

>感觉楼主是在为了领域设计而领域设计,不是为了解决问题而领域设计。
我现在就是要解决实践问题呀 我现要写一个仓管的程序,由于对这方面的
知识不大了解,所以不敢贸然下手就编写,就算写出来了还是以前知识的重复
没有什么进步.设计模式和分析模式也是刚学,不知yananay兄有啥好建议呢?