领域建模刍议(一):
分清问题域和问题解决域
领域与领域模型
俗话说得好,每个人心里有一个Hamlet,每个人心里也都是有一个领域模型的界定。
普遍的有:
观点1:我了解的领域是对业务工作开展分类区划,分类的形式是业务工作具备相应的专业知识,这种所必须的专业知识组成一个领域,这种知识是业务工作的环境,根据对领域的剖析,可以协助大家发掘、剖析、了解业务工作的实质。 换句话说,领域是为需求分析工作中业务的,它的目的性是发掘、剖析、了解业务工作的实质。
观点2:领域模型便是对领域内的定义类和现实世界中另一半的数据可视化表明。
观点3:公司使用架构设计中明确指出了三种领域逻辑性机构方式:事务管理脚本制作、领域模型和表控制模块。领域模型与此同时将手段和数据信息做为领域逻辑性的关键。
从以上可以3种观点,能够看见不一样前后文不一样的见解,乃至不一定是同一个表述目标。公司使用架构设计中的领域模型是制定到完成层的一个定义,而观点1,说法2种的领域是业务流程方面及概念结构设计的一个定义。因而,文中专指[领域方式]为业务流程角度的实体模型,引入界定如下所示:
• 领域: 是相比于系统软件来讲的,是系统软件要化解的实际问题。
• 领域模型是对领域内的定义类或现实世界中另一半的数据可视化表明(百度搜索)
• 领域模型是对于某一特殊问题的全部有关领域的抽象化实体模型(Wikipedia)
思索,怎样对图中的原素模型?
领域建模的益处
领域建模的好处,都有哪些呢?
不一样人物角色统一语言表达、统一认知能力
如上图所述所显示,客户满意度经历演化以后已经遍体鳞伤,每一个生产加工生产阶段都认为在[恰当的办事]。看到那样的栩栩如生局势一再开演:
产品运营宣传教育prd,产品运营必须各自把专有名词翻泽给业务流程方和开发者,一则业务流程语言表达,一则技术性语言表达。
好多个系统架构师在黑屋吵了大半天,为了更好地争执一个专有名词界定。例如什么叫付款?百科的表述:社会经济发展主题活动所造成的贷币债权转移的全过程。包含:买卖、结算、清算。
那麼针对以下状况是不是属于付款范围便是可以按照其含义来对比了。
- 客户A转帐给B。
- 客户根据某某网址还信用卡。
- 客户在天猫购买了一个物品,应用花呗支付。
不难看出,显性基因的统一语言表达很重要,让干系人搞清楚探讨的是一件事情。
对业务流程实质叙述,抓到中心思想
例如在支付宝钱包历史渊源的进步历程中,大家依次应用有大红包、即时特惠、商家优惠劵等商品。这也是烟筒式构架发展趋势下的物质。
领域也是有其他相近券的东西,如下图所示:
这3个物质大家锊一下:
1、 针对商家或是组织来讲,这种是不是称做之商品,可以面对商家出售包含收费标准。
2、 针对客户来讲,是不是必须了解这3个物品不一样的?这种认知能力针对营销推广,针对买卖促使,针对企业品牌的优势是啥?
3、 针对支付宝平台来讲,她们的管理机制有什么差别?
4、 针对技术性队伍来讲,她们是不是可以抽象化?
之后,大家在商品上建立了如下所示界定:
券定义:
是一种单据,做为券发行方和有着方中间凭据,具备一定的意义和法律效应。
有关关系方:
券的派发方[给予利益]
券的有着方[享有利益]
劵的派发专用工具[是券发售方位有着方派发券凭据的专用工具]
券方式:
以物质归类:纸版券,电子优惠券
以应用方法归类:门票,礼品券,提货券,抵用券、大红包,折扣券,立减卡等
可以把券做为基本商品,在业务流程形状上可以外包装为折扣券,立减卡等客户认知的[商品]或是是[推广工具]。
领域模型=ER?
领域模型是不是便是ER实体模型呢?回答是否认的,领域模型是特殊业务流程域业务实体关联的当然闪过,而ER是设计数据库查询完成关联的物质。
如下图所示,普通合伙人Person在特殊业务流程领域有2类,一类是顾客(Customer),一类是员工(Employee).
但就其完成来讲,概念模型设计有各种形状。
领域建模=DDD?
一说领域建模就谈及DDD, 是大伙儿的当然反映。由于DDD(2004年知名模型权威专家EricEvans发布了他极具知名度的著名书籍:Domain-Driven Design –TacklingComplexity in the Heart of Software)的名气颇高。我的思想观点是领域模型的发生是概念结构设计的商品,剖析是对要求及需求身后相关内容的发掘,不用造就具体内容。DDD说白了是实体模型推动设计方案,是以要求连通到设计的方式。
领域建模牵涉到什么定义呢?
域(domain):必须探讨的问题范畴,称之为域或是问题域。
子域名(subdomain):针对域开展不一样层面切分相对性内聚力的模块。例如电子商务业务流程涉及到订单信息、库存量、营销推广子域名等。
情境(context):是一个特殊群体在谈论的问题域是所生成的前后文。 这儿要注重一个定义,特殊群体并不是以精英团队或是是新项目为界限区划的群体, 反而是以常识为界限来区分的群体。 换句话说前后文并不是长期存在的, 反而是普遍存在于一个群体内部结构的,而且这种前后文大多数是以隐型专业知识(Tacit Knowledge)的形式而具有的。
域语言表达(Ubiquitous Language): 领域模型可以变成大伙儿沟通交流公共性语言表达的关键,与此同时将团队沟通与手机软件完成密切联系到一起。这类公共性语言表达是一整个精英团队工作的UBIQUITOUS LANGUAGE(通用语言)。
实体(Entity):实体便是领域中必须唯一标志的领域定义。由于大家有时候必须区别是哪个实体。有两个实体,假如唯一标志不一样,那麼就算实体的别的全部特性都一样,大家也觉得她们2个不一样的实体;由于实体有生命期,实体从被建立后也许会被分布式锁到数据库查询,随后某一情况下又会被取下来。因此,如果我们不以实体界定一种可以唯一区别的标志,那咱们就没法区别到底是这一实体或是哪个实体。
标值目标(Value Object): 值对象并没有唯一标志,这也是它和实体的较大不一样。有一部电影上说中情局根据个人隐私查看,查询到男主角和女二曾在学校期内有着同样的收件地址而分辨她们曾住在一起。这儿的Address可以做为值目标,它的全部特性影响它到底是谁,而不需要根据ID来差别。
开启事情(Event):企业级应用程序流程事情大概可以分成三类:系统软件事情、运用事情和领域事件。领域事情的开启点在领域模型(Domain Model)中,故为此而出名。根据应用领域事情,我们可以完成领域模型目标情况的多线程升级、外界系统软件插口的授权委托启用,及其根据事情发放体制完成信息系统集成。在结构化分析环节,我的想法不是区别事情种类。
思索 Event与五颜六色模型中的MI有没有差别和联络?
在电信网信息架构中有大批量的事情,如下图所示。
见解:不建议在概念结构设计差别Entity和Value Object
不建议在概念结构设计差别Entity和Value Object。例如Customer和Adress的联系和区别一样,在后面精细化管理全过程中,了解当然就明白了,例如Adress是可以重复使用的,非唯一的。
见解:在域实体模型中可以提升业务标准做为填补
在域实体模型中可以提升业务标准做为填补。例如下面的图在出货单和订单信息项的关联上面有一行管束表明:仅有当全部订单信息项都已经送至,才可以取得成功关掉订单信息。
大家一起来看看 DDD的具体内容这些是领域建模(分析阶段应当鉴别的)。
如上图所述所显示,在分析阶段可以用的至少有entity、value object。再度论述了DDD是一个重在Design的专用工具。
根据上边域,域语言表达等定义,不难理解不一样域同一专有名词的含意不一样,即使是同一物质它的内涵和外延也不一样,我们可以把域描述为问题域。
例如网上商城系统有优惠劵,包含天猫购物券、店面券、产品优惠劵等,下面的图为淘宝券截屏。
还有一个专业做券导航栏的网址:券妈妈。
这2个网站管理的券是类似的物品,他们的模式是不是就一样了呢?这2个网站管理的全是券,可是业务实体[券]是有差距的,由于他们要化解的问题域不一样。券妈妈是一个总流量通道,关心申领和自动跳转;而淘宝券关心应用状况[提交订单时订单金额扣除],包含应用券的客户对网店的粘性,二次交易等。业务实体的业务个人行为,情况也是有有一定的差别。
问题域vs问题解决域
最终总结一下,问题域和问题解决域是2个范围,所属剖析、设计方案及完成环节,在不一样环节应用的专用工具和总体目标也有一定的差别,如下图所示:
在分析阶段的领域模型中,我认为关键叙述行业实体及关联,可以协助行业基本概念(可以是业务词典方式)、及其管束(业务标准),而业务实体(域实体)仅叙述主特点就可以。
未完待续,领域建模刍议(二)将详细介绍模型的办法管理体系。
ps: 专业化思索是较好的汇总和学习培训,我还在撰写此章的历程中看到了一些模糊不清的具体内容,包含写完也是有许多不明。
ps:长期性应用java语言,近好多个月发觉.net行业不缺针对行业的深层次思考者。
强烈推荐:
汤雪华,情侣网名netfocus,2006年毕业于浙大,现阶段住在杭州。对DDD,及其CQRS构架较为有兴趣。开源项目ENode责任人,现就职阿里。
文章内容中有关entity的叙述参照了汤老师的下面
陈晴阳(Sunny Chen),2003年毕业于东南大学铁路教学区。高级程序员,系统分析员,微软公司MVP(Visual C#)。cnblogs情侣网名daxnet,并计划以该名打拼IT武林。MicrosoftDynamics AX、Microsoft .NET/C#及其领域驱动设计(DDD)的疯狂发烧友。
原文中有关Domain Events的叙述引入自
ps:集团公司内阿白针对界线前后文(Bounded context)、情境投射(Context Mapping)及其域语言表达(Ubiquitous Language)均有十分激动人心的阐述。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。