查看原文
其他

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

UMLChina 2023-06-27

阿华 2018-11-28 21:59


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


潘加宇:


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


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


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


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


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




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


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



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


====广告分隔线====


主题:软件需求设计UML全程实例剖析
开课时间:2018年12月15-16日(周六、周日)(9:00-12:00,13:30-17:30)
上课地点:上海
费用:

每人2400元,含午餐。交通、住宿费请自理。可以开增值税专用发票和增值税普通发票。

微信报名:

18758097122

QQ报名:1493943028
Email报名:

umlchinacourse@163.com

咨询电话:18758097122
报名交费:

步骤一、报名

教室座位有限,需要先报名。请通过以上任何联系方式告知我们您的姓名和单位,以便我们预留座位。

步骤二、交费

按以下方法办理交费,将交费凭证(截屏或照片)、发票单位名称(如果要开)通过以上任何方式告知我们。我们收到费用后会给您发听课证,听课证是一个pdf文件,上有详细听课地点和您的座位号。听课证上有详细地址和座位细节。

不方便现场交费,因为需按交费顺序安排座位,而且现场只有老师,无人收款。

如果您交费后因故未能参加,您的名额和上课时间将会一直保留。

交费方法:

(1)支付宝支付到talk@umlchina.com,手机扫描二维码或PC上点击付款图标即可付款



(2)微信支付到18758097122

(3)如果是公司财务汇,可以汇到负责UMLChina商务事宜的以下公司账号:

户名:杭州先思软件技术有限公司
帐号:3310 6594 0018 0100 29896
开户行:交通银行杭州滨江支行

课前准备:


请下载以下资料:
(1)最新版本的本次课程训练幻灯
http://www.umlchina.com/training/slide.htm
(2)建模软件EA30天试用版
http://www.sparxsystems.com/products/ea/trial/request.html
(3)UMLChina模型模板
http://www.umlchina.com/training/myproject.rar
(4)《软件方法(上)》第2版,自行到书店购买,勘误:http://www.umlchina.com/book/errata2ed.htm
(5)《软件方法(下)》目前公开内容,请在http://www.umlchina.com/book/softmeth0809.pdf下载
(6)课上可以专门以学员的项目作为主要讨论项目。如果您希望在课上讨论您的项目,麻烦下载http://www.umlchina.com/training/project.doc 填好后发给我们,以便老师针对您的项目相关领域事先做准备。


[训练介绍]

软件开发中,需求是解决“产品怎样好卖”的问题,设计是解决“降低生产成本”的问题。二者相辅相成,缺一不可。而且,不能相互取代。要迈向“低成本制造好卖的产品”的境界,并非喊喊口号就能达到,需要静下心来,学习和实践各种技能。

在这个强调“做减法”的时代,建模是正确帮助您“做减法”的绝佳工具。

本训练就是教授如何使用UML2.5相关的需求和设计技能来全程实例剖析一个系统的过程。

本训练对每个开发工作流,结合讲解、做练习巩固、应用到实际项目三种方式,展示使用UML2.5相关技能开发软件系统的全过程,解答实际应用中的疑难细节问题。

[学员要求]

有一年以上项目经验的需求或设计(编码)人员。不需要您有“UML基础”,只需要您有项目经验。欢迎学员携带自己的项目来听课,由专家在现场进行剖析。

[专家]

UMLChina首席专家 潘加宇。在1999年还是一名程序员时,利用业余时间创建了UMLChina,潜心研究软件需求和设计技能。2002年开始对外提供UML需求和设计的技术指导和训练服务,到现在为止,已经上门为超过270家的软件组织提供服务,覆盖了国内各个领域的领袖企业,包括通信、企业管理、电子商务、房地产、网络游戏、地理信息、物流、数码设备、医疗设备、工业控制.....等领域。

[课程大纲]

1. 概论
--需求和设计的关键区别
--核心工作流
--UML的统一
--使用UML开发过程、工具、资料介绍
2. 愿景
--愿景的要点
--如何揣摩愿景
--项目实作:愿景 
3. 业务建模
--组织的外观和内观
--选取合适的建模业务单元
--业务执行者和业务用例
--业务序列图
--改进业务序列图
--项目实作:绘制业务用例图、业务序列图 
4. 需求
--系统执行者要点剖析
--系统用例要点剖析
--从业务序列图映射到系统用例图
--项目实作:绘制系统用例图 
--书写用例规约
--项目实作:书写用例规约 
--通过关系整理用例
--需求启发技术
5. 结构分析之类图
--抽象和封装
--识别类及其属性
--识别类之间的泛化
--识别类之间的关联
--项目实作:绘制类图 
--彩色建模技术
--典型分析模式
6. 行为分析之序列图
--序列图精要
--用例、类图、序列图的互动
--专家原则和单一责任原则
--老板原则和聚合根
--可视原则
--项目实作:绘制序列图 
7. 行为分析之状态图
--状态图、类图、序列图的映射
--状态
--事件、动作和转换
--层次状态、历史状态
--转换执行序列
--分层和细化
--状态图和代码的映射
--项目实作:绘制状态机图 
8. 架构和设计
--存储层的映射
--数据源层的映射
--业务层的映射
--界面层的映射
--领域驱动设计
9. 改进指南
--根据团队情况改进
--小步前进
--正确的改进心态

以上时间分配会根据项目特点和训练进程调整。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存