首页 > 其他分享 >[答疑]商品的规格是不是应该建模为值对象

[答疑]商品的规格是不是应该建模为值对象

时间:2022-10-18 11:06:02浏览次数:51  
标签:对象 建模 地心说 答疑 为值 商品 规格 变化 属性

阿华 2018-11-28 21:59


咨询下各位,商品的规格是不是应该建模为值对象?这样对他们的增删不会影响到其他地方。比如一个酒品有200ml,500ml两种规格,管理员后来改成了500ml和700ml,为了不影响之前发的货,我做一个规格库的值对象表,然后各个商品动态的去引用这些规格。这样做可以吗?


潘加宇:


强行划分实体和值对象意义不大。
 
分析设计的建模,是要如实反映领域内涵,这样系统才可以随着领域规律的变化而变化,此时变化的成本最小。所有的出发点必须是领域事实如何,而不是卖弄技巧。


天文学上地心说、日心说的例子(百度百科):
 
/*
地心说中的本轮——均轮模型,毕竟是托勒密根据有限的观测资料拼凑出来的,它是通过人为地规定本轮、均轮的大小及行星运行速度,才使这个模型和实测结果取得一致。但是,到了中世纪后期,随着观测仪器的不断改进,行星的位置和运动测量越来越精确,观测到的行星实际位置同这个模型的计算结果的偏差,就逐渐显露出来了。
 
但是,信奉地心说的人们并没有认识到这是由于地心说本身的错误造成的,却用增加本轮的方法来补救地心说。起初这种办法还能勉强应付,后来小本轮增加到80多个,但仍不能满意地计算出行星的准确位置。这不能不使人怀疑地心说的正确性了。到了16世纪,哥白尼在持日心地动观的古希腊先辈和同时代学者的基础上,终于创立了"日心说"。
*/
 
对象就是对象,它的属性值都是会变化的。


以商品规格为例,假设有这么几个属性:名称、标准单价、规格(这个规格应该是随着商品类别的不同而改变的,具体如何表达这样的模型,看我们的分析模式幻灯片,在此先假设只经营一种商品:瓶装酒,那么可能需要关注的属性还有酒的成分、度数、保质期)。随着时间的推移,每一项都有可能单独变化,名称过时或犯忌要改,价格要改,成分不允许加某添加剂了,度数按新标准标注了,保质期也重新计算了……
 
某个系统的模型只能映射这个领域的一部分,在力所能及的范围内映射该映射的部分就可以了。
 
应对这种情况的一种做法是针对特别需要关注的视图另外加快照类。如果购买合同特别在意的可能是酒的容量(我就买200ml那种,买1000瓶),也可能是酒的名称(老名字的酒有收藏价值啊,把没改名之前的酒拿出来炫耀或转手效果不一样),把需要在意的属性都记录下来。这个快照是有时间属性的,所以不会变化。注意:不会变化是因为领域知识决定,而不是说"我设定它为值对象,所以它不能变"。
 
如果要更充分地记录历史,可以针对"商品的某个属性发生变化"这个领域事实建模,也就是说,为对象建立不同的版本,或者记录对象所有的属性值变化。
 
可以看《软件方法》第8章。


另外,属性不只是基本类型的属性,名称(string)等等,和其他对象的关联也是对象的属性,只不过类型是另一个类。

很多时候我们是关注商品规格的状态的,例如:


[答疑]商品的规格是不是应该建模为值对象_建模


这个状态之所以变化,就是因为关联到的库存对象发生了变化。


包括商品类别都有可能变化,例如政府禁酒了(当然,中国不太可能。更常见的类别是,淘宝禁VPN)


[答疑]商品的规格是不是应该建模为值对象_用例_02


根本原因是该"物品类别"对象和一个"禁售"对象关联上了,只不过很多时候不关注"禁售"的细节,没有显式表达出来。



标签:对象,建模,地心说,答疑,为值,商品,规格,变化,属性
From: https://blog.51cto.com/u_15684364/5765565

相关文章

  • [答疑]反正最后都会有增删改查用例,为什么不直接写出来?
    小马乖乖2021-8-1311:03书上说不要增删改查用例,我总觉得既然系统保存数据,肯定会有对数据增删改查的用例,为什么不列出来呢?UMLChina潘加宇首先,系统里有某个数据,不代表一定需......
  • [答疑]设计人员需要和涉众确认界面吗
    ​​别把洋垃圾当宝贝-评InfoQ中国“敏捷……”文章(一)​​​​[20210429更新]软件方法(下)分析和设计第8章连载​​譯揮(252***66)13:37:20问一个问题:操作界面是属于需求,还......
  • [答疑]看了EA官网上的需求跟踪视频,结合目前的状况,提出这个问题
    ​​别把洋垃圾当宝贝-评InfoQ中国“敏捷……”文章(一)​​三羊.Lee(183***58)16:36:44潘老师及各位同学,在使用EA的过程中有几个疑问:1、EA中的"需求建模"何时使用?是用在项目......
  • [答疑]EA数据库设计加上字段注释
    守中(306***154)11:12:41请教一下EA中数据库设计生成代码中没有字段注释怎么设置守中(306***154)11:13:24守中(306***154)11:13:47潘加宇(3504847)21:00:41这个地方设置......
  • [答疑]买家发起退款与买家撤消退款是什么关系
    ​​[分析方法,伪创新举例]软件方法(下)分析和设计第8章​​杭大伟(28****23)13:27:26问个UML用例之间的关系问题:在电商网站中,买家买到东西不满意,于是发起了退款。后来卖家说......
  • [答疑]每个属性后面的[0..1],在EA里怎么表示的
    凌波微步(27***900)13:54:45每个属性后面的[0..1],在EA里怎么表示的?thbin<tan***qq.com>14:01:17thbin<tan***qq.com>14:01:530..1是属性的多重性,选中一个属性,设置它的Mu......
  • [答疑]茶叶盒的用例
    ​​[分析方法,伪创新举例]软件方法(下)分析和设计第8章​​乡下小老鼠(250****30)11:21:08大家好,学习UML一段时间了,在自己的日常开发中也有了一些应用,各种图和元素的用法也有......
  • [答疑]识别员工身份的类图和状态机图
    Alan2021-6-2920:11在这个问题卡住了,@UMLChina潘加宇 和各位同学帮忙看下左耳东2下面写3a?Alan是2bJeff@Alan 如果是用例的话,我建议将2a和2b作为扩展条件来处理,写在主流......
  • 建模竞赛题第2赛季第27轮答案-《软件方法》和《山海情》
    题目[材料题]以下是《软件方法》书的某个截图:请从电视剧《山海情》第1集中,找到和以上截图内容最相符的一段台词。可回答文字,也可以截图上传发图片链接。(本题2分)回答(1)有的同......
  • [答疑]EA中类怎么表现私有继承
    陈诒亮(875365197)09:29:37EA中类怎么表现私有继承陈诒亮(875365197)09:29:44private继承潘加宇(3504847)22:11:10设置泛化关系的范围为private。这是某些特定编程语言的......