[答疑]京酱肉丝可以提炼成一个类吗?

DDD领域驱动设计批评文集

做强化自测题获得“软件方法建模师”称号

《软件方法》各章合集


(匿) 2024-9-3 15:02

老师,我也经常遇到这样的困惑,领域概念应该提炼到什么层次,像京酱肉丝什么条件下可以定成子类,什么条件下是实例?

图片

UMLChina潘加宇

(补注:问题的图来自《京东云开发者DDD妙文欣赏(1-4合集》

这个问题还真不好答。其实,只要基本教育过关,不断训练出来的逻辑思维应该已经接近于本能,根本不用专门花时间去斟酌这个。如果这个地方老是被卡住,那问题就不只是面向对象建模或UML那么简单了。

既然是问“领域概念应该提炼到什么层次”,首先要了解“概念”代表了从很多很多具体实例中归纳出来的共性。

像乘数、乘法、交换律是概念,下面这个就不是,因为要是乐意可以搞出无穷多个来,1×10,1×11…… 

图片

“人有姓名”是概念,“(注意看,)这个男人叫小帅”不是,因为如果愿意,还可以有“这个女人叫小美”,“这个男人叫大壮”,“这个女人叫有容”…… 

图片

关于“京酱肉丝什么条件下可以定成子类”,先纠正一个用词。不是定成“子类”,是定成“类”。子类只是某个类在类关系中扮演的一个角色。B在和A的关系中扮演子类,但B可能在和C的关系中扮演超类,或者是扮演D的属性的类型。 

图片

如果要把某个东西定义成一个类,这个类得有自己特有的属性或操作吧?

下面是一个关于京酱肉丝的图片: 

图片

京酱肉丝有什么属性?中文名?口味?食材?剁椒鱼头、红烧茄子也有的。中文名、口味是菜品的属性,京酱肉丝特有的只是属性的值。 

图片

有的同学可能会有这样的问题:

假设系统要跟踪餐馆里出品的每一份京酱肉丝,看看里面的猪里脊真实质量多少(精确到微克),甜面酱真实质量多少(精确到微克),那么是不是就可以把京酱肉丝图片右侧的猪里脊等变成属性,把京酱肉丝变成一个类呢? 

图片

也不行,首先,这个时候关心的不是食材是什么,而是食材的真实质量,这两个不是一个东西。另外,同上,这不是京酱肉丝特有的,真正的概念是类似下面的内容:

 

图片

那什么时候京酱肉丝可以成为一个类?

就是它是一个“类”的时候——这不废话嘛!实际上是说它像“面”、“咖啡”一样,成为一个类别的时候,就可以建模成一个类了。注意,是可以,但不一定要这样做。

这是有可能的。像“可乐”,一开始指的是一种叫“可口可乐”的饮料。此时,饮料才是“类”,可口可乐只是饮料的一个实例。后来跟随者越来越多,人们大脑里逐渐建立起这样的概念:那种黑褐色的、味道是那样的糖水就叫“可乐”,“可乐”就可以变成一个类。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值