转帖:http://xiaoqing.me/2011/12/domain-model-createdat-updatedat/
编程时,大家会经常用到两个字段,createdAt和updatedAt。不但很多公司有这样的数据库规范要求,一些框架对它们也有天然的支持。不过你知道如何正确使用它们吗?别忙,先让我们看一个小例子。
框框网是一家刚起步的B2C网站,为了招揽人气,准备在春节前搞一个促销专区,吸引大家抢购。做为框框网的开发人员,小明参与了这个任务的开发。他收到的需求是:管理员可以在指定时间把促销商品上架,用户可以看到并购买。小明有一定的工作经验,稍做分析,就建立了名为“促销商品”(PromotionItem)的对象,包含两个状态:NEW和ONLINE,分别表示新建和已上架。并且设计了一个额外的字段onlineTime,如图所示:
这样,不但可以知道促销商品是否已经上架,如果需要的话,管理员也可以知道上架的时间。
开发完成以后,一切工作正常。几天后,小明接到业务的反馈:如果缺货或者万一出错,管理员可以把促销商品撤下来,即下架。小明挠了挠脑袋,添加了一个新的状态:OFFLINE来表示下架。但是如果不添加offlineTime,万一业务想查看商品啥时候下架怎么办?考虑来考虑去,又在数据库表上添加了一个字段offlineTime。同时他想到应该把商品的卖出时间也记录下来,干脆一块加上:
添加一个状态还比较容易,但添加字段就麻烦了,要写数据库脚本,而且根据框框网的开发规范,所有新增的SQL脚本都要汇报给开发的李头,再找DBA审查。这一来一去耽误不少功夫。不过好歹改完了,审查也通过了。小明暗自埋怨业务怎么不一次说清楚,折腾来折腾去的多麻烦。
又过了一段时间,小明突然被告知,原来做的上下架部分需要有点小改动,这些促销商品只能在指定期限内内卖,过了促销期就不再卖了。用户看不到,但是管理员可以在“过期的促销商品”里面看到。略加思索,小明心中有了数,应该如何修改。首先要添加一个新的状态EXPIRED,但是要不要加一个字段expiredTime呢?
他很纠结,时间字段越加越多,不但上面麻烦的流程要重新走一遍。万一业务再改怎么办?
其实他大可不必如此纠结,甚至这些字段全都不要。因为框框网的数据库规范上已经标明,任何数据库表都要有createdAt和updatedAt两个字段,只是他从未用过,曾经问过别的同事,但大家都说不出所以然来。我们使用这两个字段之后,发现促销商品简单多了:
在这个图中,createdAt表示促销商品的创建时间,updatedAt则根据状态而定:如果当前状态是已上架,则updatedAt表示上架时间;如果当前下架,updatedAt表示下架时间;如果当前过期,则表示过期时间。
通过两个字段,不但可以知道商品的最新状态,也可以知道发生的时间。小明之前纠结的问题解决了。即使业务有类似新的需求,都不必改动太多。
结论:促销商品是一个领域对象,从新建到上架,再到下架或者过期,它状态的迁移明确表明了业务的流程变化。对这类领域对象,我们关注它的状态,可以借用createdAt和updatedAt来捕捉一些重要的数据,从而简化领域模型。
- 大小: 20.5 KB
- 大小: 25.1 KB
- 大小: 27.1 KB
- 大小: 18.4 KB
分享到:
相关推荐
高清中文,你值得拥有. 难道一寻的UML建模用例分析
UML自诞生以来,已经成为软件工程领域中最为广泛使用的建模工具,尤其在大型复杂项目中,其价值尤为显著。 本书“UML精粹:标准对象建模语言简明指南(第3版)”是UML学习者和实践者的宝贵资源。英文原版的CHM格式...
通过实体-关系图(ER图)、类图和对象图,我们可以描述数据实体、它们之间的关系以及如何操作这些数据。数据建模帮助确保系统设计能够准确地反映业务需求,并且为数据库设计提供基础。 **业务建模:** 业务建模侧重...
《软件工程与对象建模技术》是一份深入探讨软件开发过程和对象建模技术的详尽资料,旨在为读者提供全面的理解和实践指导。在软件工程领域,对象建模是现代软件开发中的核心组成部分,它使得复杂系统的设计和实现变得...
《UML精粹:标准对象建模语言简明指南》是Martin Fowler的经典之作,自1997年初版以来,一直是UML学习者和实践者的首选参考书籍。这本书旨在为读者提供一个清晰、简洁的UML(Unified Modeling Language)理解和应用...
4. **类和对象建模**:类是对象的模板,对象是类的实例。课程会讲解如何设计和实现类,包括属性(数据成员)和方法(行为),以及如何通过接口(public,private等)控制访问权限。 5. **继承和多态**:继承允许...
面向对象建模技术是计算机科学中的一个重要领域,它在软件工程中扮演着核心角色,尤其在设计复杂的系统时。吉林大学的这门课程——“面向对象建模技术”由柴胜教授讲授,旨在深入讲解如何有效地使用面向对象的方法来...
《UML面向对象建模与设计答案》是一个包含详尽解答的资源,旨在帮助学习者理解和掌握UML(Unified Modeling Language)在面向对象设计中的应用。面向对象建模是软件开发过程中至关重要的一环,它通过可视化的方式...
UML(Unified Modeling Language),即统一建模语言,是一种标准的图形化建模语言,用于软件工程领域,特别是面向对象设计和分析。UML提供了一种可视化的方式来描述系统的需求、结构和行为,使得开发团队能够更清晰...
清华大学出版社《UML精粹:标准对象建模语言简明指南 第3版 》在紧迫的时间压力下 程序员很难通过紧跟技术创新的脚步来享受软件工程领域的最新成果 正因如此 殿堂级大师Martin Fowler这本旨在帮助专业人士提升效率的...
面向对象建模技术是计算机科学中的重要组成部分,尤其在软件工程领域中占据核心地位。吉林大学的这门课程,由柴胜教授主讲,旨在帮助学生深入理解和掌握面向对象的思维方式,以及如何运用这些概念来设计和实现复杂的...
领域本体建模方法概述 本体是一种形式化的、规范化的知识表示方法,它用于描述特定领域的概念、属性、关系及其约束,旨在促进不同系统之间的信息共享和理解。本体在知识工程、自然语言处理、信息检索等多个领域都有...
UML(统一建模语言)是软件工程领域中广泛使用的标准化建模语言,用于可视化、理解和文档化软件系统的结构和行为。本课程的核心目标是帮助学习者掌握UML的基本概念、图形符号以及如何应用这些工具进行系统建模。 在...
该语言自1996年在欧洲ESPRIT项目中由Hilding Elmqvist等人开发以来,经过不断的版本更新和进化,已经成为一种与领域无关的、强大的面向对象建模语言。Modelica语言允许用户通过构造和连接软件组件来建立模型,并具有...
每种图都有其独特的用途,如用例图用于描绘用户与系统交互,类图用于表示类和对象的关系,而序列图和协作图则关注对象间的动态交互。 3. **建模元素**:如类、接口、对象、关联、泛化、依赖、组合、聚合等。理解...
UML面向对象建模与设计(第二版)pdf
"jtest domain领域建模工具"是一款专门用于软件开发中的领域建模的高效辅助工具,它可以帮助开发者更好地理解和表达业务领域的复杂性,从而提高软件设计的质量和效率。领域建模是面向对象分析与设计的重要组成部分,...