关于领域建模(一):
区分问题领域和问题解决领域
域和域模型
俗话说,每个人心中都有一个哈姆雷特,每个人心中都有一个定义域模型的定义。
常见的有:
说法一:我理解的领域是对商业事务进行分类。分类的方式是商务有相关的知识,构成一个领域,这个知识就是商务的后盾。通过对场的分析,可以帮助我们挖掘、分析和理解商务的本质。换句话说,领域是为需求分析服务的,其目的是挖掘、分析和理解商务的本质。
陈述2:领域模型是领域中的视图和真实世界中的工具的可视化指示。
陈述三:在企业应用架构模型中,明确提出了三种领域逻辑组织模型:事务脚本、领域模型、表格模块。领域模型将行为和数据作为领域逻辑的焦点。
从以上三种说法中,我们可以看到不同语境下的不同观点,它们甚至不一定是统一的表达工具。企业应用架构模式中的领域模型是从设计到实现的视图,而语句1和语句2的领域是从业务层面和分析阶段的视图。因此,本文将[领域模型]称为业务视角的模型,引用的定义如下:
领域:相对于制度,是制度不得不解决的现实问题。
领域模型是领域中的视图或者真实世界中的工具的可视化表示(百度)
领域模型是特定问题所有相关方面的抽象模型(维基百科)。
思考,如何对上图中的元素进行建模?
领域建模的好处
领域建模的好处是什么?
不同的角色统一了语言和认知
如上图,客户需求进化后,已经完全改变了,每一个加工制造环节都自认为是【做事精准】。你有没有注意到,这样一个生动的情景一再上演:
产品经理宣讲prd,产品经理需要把术语翻译给业务方和开发者,分别是一门业务语言和一门工艺语言。
几个建筑师在黑屋子里争论了很久,争论一个名词的定义。比如什么是支付?百度百科注释:社会经济活动引起货币债权转移的历程。包括:买卖、整理、结算。
那么以下几种情况是否属于给付的限制,可以对照其固有特征。
用户A转账给B。
用户通过某某网站还信用卡。
用户在天猫购买了一个器械,使用花呗付款。
因此,有一个统一的明确的语言是非常重要的,这样相关的人才能明白正在讨论的是一回事。
抓住商业的本质
比如支付宝的成长过程中,我们用过红包、实时优惠、商家优惠券等产品。这是烟囱建筑发展的产物。
业内还有其他类似的优惠券,如下图所示:
让我们来看看这三款产品:
1.对于商家或者机构来说,这些产品能不能叫产品,能不能卖给商家包括收费。
2.用户有必要了解这三种仪器的区别吗?这些认知对营销、业务推广和品牌有什么好处?
3.对于支付宝平台,他们的治理模式有什么区别?
4.对于工艺团队来说,可以抽象吗?
之后,我们对产品形成了如下定义:
债券的定义:
它是票据的一种,作为签发人和所有人之间的凭证,具有一定的价值和执法效力。
相关利益方:
息票发行人[提供权益]
票的主人[享有权益]
30的发行工具[是证券发行商发行有利于所有者的凭证的工具]
凭证表单:
按媒介分类:纸质优惠券和电子优惠券。
按用途分类:入场券、礼券、送券、代金券、红包、优惠卡、满减卡等。
平台如何推广,分享网站平台推广技巧。
代金券可以作为基础产品,在商业形式上可以包装成用户感知的【产品】或【营销工具】如打折卡、满减卡等。
域模型=ER?
领域模型是ER模型吗?答案是否定的,领域模型是特定业务领域中业务实体关系的自然出现,er是设计阶段数据库实现关系的产物。
如下图所示,特定业务领域的自然人有两种,一种是客户,一种是员工。
但就其实现而言,数据库设计有多种形式。
领域建模=DDD?
说到领域建模,提到DDD是每个人的自然反映。DDD(2004年,著名建模专家EricEvans公布了他最有影响力的名著:领域驱动设计——在软件的核心解决复杂性)是众所周知的。我的观点是,领域模型的发生是分析阶段的产物,分析是对需求和需求背后相关内容的挖掘,而不是创造内容。DDD,顾名思义,是一种模具驱动的设计,是从需求打开到设计阶段的一种方式。
领域建模涉及哪些视图?
定义域:要讨论的问题极限称为定义域或问题域。
子域:将一个域划分成不同纬度的相对内聚的单位。例如,电子商务业务涉及订单、库存、营销子领域等等。
语境:特定群体讨论的问题域就是形成的语境。这里我想强调一个观点,具体的人不是以团队或者项目来划分的,而是以知识来划分的。也就是说,语境不是无处不在的,而是存在于人群内部的,而这些语境大多是以隐性知识的形式存在的。
领域语言:领域模型可以成为大家共同语言的焦点,同时也会将团队身份与软件实现紧密联系在一起。这种共同语言是整个团队的通用语言。
实体:实体是一个域视图,需要在域中唯一标识。因为我们有时候需要区分它是哪个实体。有两个实体,如果它们的唯一身份不同,那么即使实体的所有其他属性都相同,我们也认为它们是两个不同的实体;因为一个实体是有生命周期的,它可能在建立之后就被持久化到数据库中,然后在某个时候被取出来。因此,如果我们不为实体定义一个唯一的标识符,那么我们就无法区分它是这个实体还是哪个实体。
价值对象:价值工具没有唯一标识,这是它和实体最大的区别。有一部电影,联邦调查局通过隐私查询,发现这男的和这女的大学时送货地址一样,判断他们同居过。这里的地址可以作为一个价值工具,它的所有属性决定了它是谁,而不必用ID来区分。
事件:企业应用事项大致可以分为三类:系统事项、应用事项、域事项。领域问题的触发点在领域模型中,因此得名。通过使用领域事务,可以实现领域模型工具状态的异步更新,外部系统接口的委托和挪用,通过事务调度机制实现系统集成。在系统分析阶段,我的观点是,事物类型不分。
想想颜色建模中Event和MI的区别和联系?
电信信息架构存在很多问题,如下图所示。
意见:不建议在解析阶段区分Entity和value object。
不建议在解析阶段区分实体和值对象。就像客户和地址的关系和区别一样,熟悉度在后续的细化过程中自然会变得清晰,就像地址是可复用的,不是唯一的。
视图:业务规则可以作为补偿添加到域模型中
可以将业务规则添加到域模型中来弥补它。例如,在下图中,交货通知和订单项目之间的关系有一条约束线:只有当所有订单项目都已交付时,订单才能关闭。
让我们来看看DDD的内容,它们是领域建模(应该在分析阶段确定)。
如上图所示,解析阶段最多只能使用实体和值对象。再次证明了DDD是一个专注于设计的工具。
基于以上对领域和领域语言的观点,就不难理解不同领域统一名词的意义差异,即使是统一的媒介,其内部和外延也是不同的,我们可以把领域表述为问题领域。
比如电商网站有优惠券,包括天猫购物优惠券、店铺优惠券、商品优惠券等。下图是淘宝优惠券截图。
还有一个专门做凭证导航的网站:券商妈妈。
这两个网站管理的代金券是类似的设备。他们的型号一样吗?这两个网站都是管理代金券的,只是业务实体【代金券】不同,因为要解决的问题域不同。券商妈妈是流量入口,讲究接收和跳转;淘宝优惠券关注的是使用情况【下单时订单金额抵扣】,包括用户对店铺的粘性和二次消费。经营主体的经营行为和地位也不同。
问题领域与问题解决领域
最后总结一下,问题域和问题求解域是两个限制,分别属于分析、设计和实现阶段,不同阶段使用的工具和目的也不同,如下图所示:
在分析阶段的领域模型中,我认为领域实体和关系的主要外观可以辅助领域名词(可以是业务字典的形式)和约束(业务规则)的标注,而业务实体(领域实体)只能看主要特征。
未完待续,领域建模刍议(2)引入建模的方式体系。
Ps:系统思考是最好的总结和学习。在写这一章的过程中,我发现了一些模糊的内容,包括很多写完之后的未知。
Ps:在使用java语言很长一段时间后,我发现Java语言中有很多深刻的思考者。最近几个月的净场。
不寻常的推荐:
唐·,网名网焦点,2006年毕业于浙江大学,现居杭。对DDD和CQRS的建筑比较感兴趣。开源软件ENode的负责人现在为阿里巴巴工作。
文章引用了唐先生关于实体形态学的论述。
http://www.cnblogs.com/netfocus/archive/2011/10/10/2204949.html
2003年毕业于中南大学铁道学院。高级程序员,系统分析师,微软MVP(Visual C#)。Cnblogs名为daxnet,计划以此名在IT江湖游走。微软Dynamics AX的爱好者,微软。NET/C#和领域驱动设计(DDD)。
在本文中,领域事件的形态学引自
http://www.cnblogs.com/daxnet/archive/2012/12/27/2836372.html
Ps:社区里的Abai有关于边界上下文、上下文映射、领域语言的精彩描述。