领域驱动一切

当Java世界提供的可选择性框架平台越来越多时,我们可能被平台架构所深深困扰,而无暇顾及软件的真正核心:业务建模,其实,业务领域建模同样是一个比平台架构更复杂,更需要学习的新的领域。

在实践中,我们技术人员在经过冗长的平台架构学习和实践后,就匆忙开始项目开发,这时是什么指导他们进行软件业务实现呢?大部分可能是依赖数据库建模,甚至是复杂冗长的数据库存储过程设计,这些已经开始走向面向对象分析设计的反方向,走上了一条错误的软件开发方向,最终开发出缓慢的、经常当机的Java企业系统。

如果你没有恰当的OO设计思想,Java就会用性能惩罚你,这可能是Java世界的一个潜规则。

那么,一个正确的OOA/OOD/OOP步骤是什么呢?目前围绕模型驱动设计(MDD)的设计思想成为主流思想,MDA更是在MDD基础上提升和升华。下面让我们首先了解,如何使用领域驱动设计思想来分析设计一个软件系统。

当我们不再对一个新系统进行数据库提炼时,取而代之的时面向对象的模型提炼。我们必须大刀阔斧地对业务领域进行细分,将一个复杂的业务领域划分为多个小的子领域,同时还必须分清重点和次要部分,抓住核心领域概念,实现重点突破。

核心领域模型

精简模型,找出核心领域,将业务需求中最有价值的概念体现出来,让核心变精要,这实际就是一个使复杂问题变简单的过程,也是对我们软件设计人员真正能力的考验。

核心领域模型不是轻易能够发现,特别是他处于一个纷乱复杂的众多领域模型结构中时,核心模型通常是我们某个子领域关注的重点,例如订单模型是订单管理领域的核心;消息模型是论坛或消息领域系统的核心。

目前,分析领域有很多模式来帮助我们来提炼核心模型,例如四色原型、Martin Fowler 的分析模式等,例如MF的“分析模式”(Analysis Patterns)中的记账模型就是不仅仅用来记录账目数值,而且可以记录和控制账目的每一次修改。而四色原型则是一种高于分析模式的一种原型基本模式,下面是本人根据四色原型提炼的核心领域模型概念。

一般情况下,在企业应用中,核心模型总是在其周围围绕一些所谓的“卫星”,这实际上也是来自四色原型的一个推论,核心模型和其“卫星”的类***如下:

根据Eric Evans在其“领域驱动设计”一书中定义,领域模型划分为实体和值对象两种,实体模型是指业务领域中具有***属性的对象;而值对象则可能是一种Description或状态或规则。只要有实体对象,就可能存在实体的状态,状态跟踪有时成为一个业务领域使用计算机软件的首要跟踪,但是,数据库不是对象状态的唯一表达方式,只是一种存储方式(见状态对象:数据库的替代者)。

***中,实体核心对象大部分可能有一种类型,例如核心模型是产品,那么存在产品目录;核心模型是消息;就存在消息类型;核心模型是信息;总存在信息类别,我们总是使用分类方式来管理业务领域的信息,有时,类别甚至复杂到树形结构。

核心实体模型有时会有一个1:N关联的子实体,一般可能表达实体的细节,例如:核心模型是订单,那么存在订单条目这样一个细节,一个订单中可能有多个订单条目;如果核心模型是信息,那么存在该信息的多个回复或评论;这样的关联一般存在多个业务领域中。

模型界面实现

原来,我们以为分析设计阶段无需了解实现细节,分析人员只要闷头做分析UML***,而无需顾及如何具体实现,其实这是一个误区。

Eric Evans在其“领域驱动设计”一书中认为:分析人员负责从领域中收集基本概念;设计则必须指明一组适应编程工具构造的组件,以及这些组件必须能够在目标环境中有效执行。模型驱动设计(Model-Driven Design)抛弃了***分析模型与设计的做法,使用单一的模型来满足这两方面的要求。因此,对于核心模型必须掌握了解其实现细节。

从另外一个方面来说,中国的客户总是从界面设计来表达他们的意***(如果中国客户能够使用Use Case等UML***来表达他们概念真是不可想象),例如客户会说,我希望有一个界面让我将订单数据输入,然后能够查询符合查询条件的订单。因此,我们的核心模型至少能够顺利地映射到界面实现,相反,这个客户有这样订单界面要求,但是你没有提供一个与之适应的核心实体模型,界面实现将变得复杂,甚至走很多弯路,诞生不少DTO垃圾对象。

以JdonFramework框架实现为例子,框架提供了围绕核心模型的新增删除修改查询(CRUD)功能以及批量功能的快速实现,尤其CRUD功能实现前提是必须提炼出核心模型,从而其界面设计流程就能通过配置立即实现,这样一步到位实现领域模型到界面的过渡,可以将我们设计核心模型和客户要求的界面需求能够做到完整的统一。

开源JdonFramework***包中message案例实际就是上述核心模型***的一种实现项目,更复杂的项目可以认为是核心模型的重叠和反复使用。

核心模型的选择

实际项目中,会存在多个核心模型的重叠和覆盖使用,主要取决于你的领域关注重点。

例如当客户和我们说要做一个旅游网站时,我们必须充分了解需求,它的软件系统重点是哪些功能。如果当他首先说:我需要一个酒店设备的查询系统,因为他的客户对酒店设备非常关注,那么我们可能认为酒店设备是这个领域模型的核心;酒店设备。如果他又进行描述:我需要一个界面,客户在输入酒店资料时,选择多个酒店设备,那么在这样一个关注领域,核心模型实际是酒店,而酒店设备可能成为酒店的一个特征实体属性,甚至是值对象了。

以进销存系统为例子,在采购系统中,采购单是一个核心实体模型,而原材料是一种辅助实体模型;在库存系统中,入出库单是一个核心实体模型,原材料或成品代表的是一个库存物品概念模型,当需要库存报表查询输出,可以立即计算出来,或将结果缓存起来,缓存起来的结果其实是库存物品对象的状态,可以使用值对象来实现。

核心模型的精练

当核心模型被定位和确定后,相当于我们抓住领域本质,这时我们可以使用面向对象的概念对模型进行精练细化,实际就是明确对象的属性,确定模型对象的边界,通过反复重构,结合GoF等设计模式,使得我们得模型准确反映本质,从而实现模型的灵活性设计。所有这些,都是数据表驱动设计所不能实现的。那你还抱着数据库建模干什么呢?

为艺术而生技术

DDD(领域驱动建模)是告诉我们如何做好业务层!并以领域驱动设计思想来选择和合适的框架,本文以基于JdonFramework开发的JiveJdon3.0说明DDD方法的实战应用。

首先必须认识到:领域建模是一种艺术的技术,不是数学的技术,它是用来解决复杂软件快速应付变化的解决之道(快速适应需求变化的软件复用)。

我们知道软件的产生过程是:分析、设计、编程、测试、部署。过去,分析领域和软件设计是***的,分析人员从领域中收集基本概念;而设计必须指明一组能北项目中适应编程工具构造的组件,这些组件必须能够在目标环境中有效执行,并能够正确解决应用程序出现的问题。模型驱动设计(Model-Driven Design)抛弃了***分析模型与设计的做法,使用单一的模型来满足这两方面的要求。这就是领域模型。

单一的领域模型同时满足分析原型和软件设计,如果一个模型实现时不实用,重新寻找新模型。如果模型没有忠实表达领域关键概念时,也必须重新寻找新的模型。 建模和设计成为单个迭代循环。将领域模型和设计紧密联系。因此,建模专家必须懂设计,会编程。象的状态,可以使用值对象来实现。

那种将业务逻辑交由业务界面处理的快速UI方式是旁门左道。希望象C/S结构那样可视化拖拖***形就完成的软件开发是一种错误的方向,开发时快速,难于维护和扩展,虽然使用J2EE技术,其实是一种伪多层技术。

链接

领域驱动的层次划分

业务层将细分为两个层次:应用层和领域层。它们的定义是:应用层:定义软件可以完成的工作,并且指挥具有丰富含义的领域对象来解决问题,保持精练;不包括业务规则或知识,无业务情况的状态;领域层:负责表示业务概念、业务状态的信息和业务规则,是业务软件核心。

层次之间必须清晰分离,每个层都是内聚的,并且只依赖它的下层,为了实现各层的最大解耦,Ioc模式和Ioc容器是目前最好的选择。

领域驱动一切

转载请注明出处学文网 » 领域驱动一切

学习

镁合金热处理

阅读(27)

本文为您介绍镁合金热处理,内容包括镁合金时效热处理工艺,变形镁合金热处理规范。镁合金具有较高的比刚度、比强度、良好的电磁屏蔽性、减振性能和散热性能,是最轻的结构金属材料之一,在航空航天领域具有广泛的应用前景。本文综述了镁合金

学习

生活在香格里拉,无数个庞杂的昼夜

阅读(22)

本文为您介绍生活在香格里拉,无数个庞杂的昼夜,内容包括香格里拉美文,香格里拉的夜晚的美文。人们给了香格里拉无数优美的赞誉,而我怀念的是那些庞杂的坚实的昼与夜。把美好的写在开始起初的香格里拉,也许只是《消失的地平线》作者笔下的

学习

老年人颈动脉病变情况的B超表现特点

阅读(31)

本文为您介绍老年人颈动脉病变情况的B超表现特点,内容包括80岁老人颈部动脉有斑块正常吗,左侧颈动脉颅外段病变是什么意思。目的探讨老年人颈动脉病变情况及B超表现特点。方法我院2012年9月~2013年9月间门诊或住院患者100例,所有患者均行

学习

优秀丹经《修道全指》

阅读(30)

本文为您介绍优秀丹经《修道全指》,内容包括丹经秘诀白话文,古书丹经。《修道全指》为清末流行的优秀丹经。作者蒋克志,又名救愚,字于道,号植阳子,为晚请浙江宁波人。蒋为全真龙门派嫡传,该派传承顺序为:开派祖师为元代邱处机,至第八代为伍冲虚

学习

撞背提阳气夏季最适宜

阅读(25)

本文为您介绍撞背提阳气夏季最适宜,内容包括撞背提阳气的最佳时间,撞背提阳气。撞背健身,原是习武者藉以提高内脏抗震力及后背抗击力的一种功夫,由于其易学易练,且健身效果显著,所以逐渐流传于民间。“撞背”这个看似简单又略带粗犷的动作,实

学习

S.H.E 大蛇团の超A计划

阅读(12)

本文为您介绍S.H.E 大蛇团の超A计划,内容包括loneranger超燃现场,监测排卵是b超还是用阴超。在已经过去的蛇年里,我大蛇团可说是威风八面,金蛇狂舞。而在马年里,大蛇团同样蓄势待发,通告满档。而不管是分开还是合体,大蛇团也都是13年如一日地

学习

“初生蛋”营养价值会更高些吗?

阅读(47)

本文为您介绍“初生蛋”营养价值会更高些吗?,内容包括初生蛋的营养价值和功效,初生蛋和普通鸡蛋营养价值一样吗。现象:“初生蛋”数倍高价笔者在走访多个菜市场发现,一种名叫“初生蛋”的鸡蛋颇受市民追捧。这种蛋个头很小,大约只有半个普

学习

感悟秋味:《故都的秋》魅力所在

阅读(34)

本文为您介绍感悟秋味:《故都的秋》魅力所在,内容包括故都的秋有哪些秋味,故都的秋的感悟。《故都的秋》作为高中语文课本的一篇经典散文篇目,历来颇受高中学生的喜爱,但是很多学生更多地是对其感性上的喜爱,还有很多地方学生很是困惑,如天

学习

情感教练赵永久 为“爱无能”开方子

阅读(35)

7月18日,位于北京西直门附近的“爱的能力”训练营迎来第51期学员,一个45平方米左右的开间,挤挤挨挨地坐满了35个人。在自我介绍阶段,现场的气氛就已稍显压抑了,一名学员张口就是哽咽,“我的婚姻状况是离异,我来到这里的目的……”她捂着脸哭起

学习

“网络成语”知多少

阅读(19)

本文为您介绍“网络成语”知多少,内容包括网络成语梗,网络成语缩写大全。“不明觉厉、十动然拒、男默女泪、累觉不爱、兆山羡鬼、猪涂口红、前腐后继”……看到这些“长相”怪异却又很像成语的新词,你是否感到一头雾水,不知所云?这些便是近

学习

黑洞 让霍金低头认输

阅读(22)

本文为您介绍黑洞 让霍金低头认输,内容包括霍金写了关于黑洞的什么文章,霍金事迹简短100字黑洞。牛津大学著名物理学家史蒂芬・霍金当众认输,他1975年赖以成名的黑洞理论,承认黑洞并非可怕的物质“终结者”,由崩溃的星球形成的黑洞其实不会

学习

教您看预包装食品标签等

阅读(17)

本文为您介绍教您看预包装食品标签等,内容包括预包装食品的标签应标注哪些内容,学会看预包装食品标签。食品标签主要显示食品的组成成分、食品的特征和性能,是消费者日常选购包装食品的主要依据。因此,标签内容的真实、准确与否直接关系消

学习

如何进行实战训练

阅读(15)

本文为您介绍如何进行实战训练,内容包括实战训练为什么会牺牲,全面训练方法教材。一、实战训练的目的1.树立信心,克服恐惧。格斗搏击是近战中攻击敌人的有力手段,是和敌人面对面的你死我活的斗争。只有经过身临其境的严格的格斗搏击实战训

学习

中国果蔬加工产业现状与发展

阅读(21)

本文为您介绍中国果蔬加工产业现状与发展,内容包括我国果蔬产业发展现状,中国果蔬加工产业流程。近20年来,中国的果蔬加工业发展迅速,具有一定的技术水平和生产规模,取得了巨大的成就,果蔬加工业在农产品贸易中占据了重要地位。目前,中国果蔬

学习

LED灯具低压驱动技术

阅读(21)

本文为您介绍LED灯具低压驱动技术,内容包括led灯具的三种驱动方式,低压灯led驱动原理。本文从技术和市场经济的角度对LED灯具低压驱动IC的技术要求进行分析,简述家庭照明用LED驱动IC的工作原理和应用技术。关键词:LED驱动IC;LED灯具LED灯具

学习

公共领域

阅读(41)

本文为您介绍公共领域,内容包括公共政策领域大全,公共领域深度解析。按照我们的祖训,为人应当以天下为公,而个人修炼之最高境界当为大公无私。作为一种思想范畴,"公"与"私"的辨证关系在中国思想史上本来有着十分重要的地位。然而,大概是由于

学习

砂箱在桥梁施工领域中的应用

阅读(22)

本文为您介绍砂箱在桥梁施工领域中的应用,内容包括公路桥梁砂箱施工原理,桥梁砂箱的作用。【摘要】砂箱制作简易,使用方便,安全可靠,承载力大,具有很高的可操作性等众多优点,砂箱在桥梁施工领域中应用非常广泛。此文重点阐述了砂箱应用理论,结

学习

迈入标准化进程 模块化驱动数据中心“解耦合”与“重耦合”

阅读(19)

从集中式数据中心,到分布式数据中心,再到现在的模块化数据中心,数据中心的发展演绎了从合到分再重新耦合的历程。在新一代数据中心中,基础设施已经不再只是简单地提供水、电、风和网络,追求的也不再仅是节能环保、高可靠和可用,此外还要满足新

学习

浅议招标领域围标串标现象及防治措施

阅读(14)

本文为您介绍浅议招标领域围标串标现象及防治措施,内容包括招标发生串标围标是谁的责任,招标代理商对串标围标的责任。【摘要】现代社会经济的发展,国家对于各项公共建设事业的重视程度也越来越深,各个类型的工程项目在数量及规模上都有了

学习

浅析测试驱动开发

阅读(26)

本文为您介绍浅析测试驱动开发,内容包括测试驱动开发的关键过程,测试驱动开发的优点和缺点。测试驱动开发是一种用于敏捷软件开发的开发过程,可以快速应对需求变化。它要求先设计和编写测试代码,然后编写功能代码通过所有测试,再重构以提高

学习

汽车驱动桥故障分析

阅读(22)

本文为您介绍汽车驱动桥故障分析,内容包括汽车驱动桥的常见故障分析,汽车驱动桥故障分析树状。新岭煤矿(原岭北露天矿)自2000年生产运输方式逐步由准轨铁路运输向汽车运输过渡,2004年汽车运输全部取代铁路运输,担负新岭煤矿煤、岩运输任务

学习

互联网领域的知识产权

阅读(26)

本文为您介绍互联网领域的知识产权,内容包括互联网知识产权的法律法规,互联网平台知识产权。网络作为一种新的传播方式,也就是大家口中的第四媒体。对人类生活有很大的影响,而且这个影响从广度与深度都是史无前例的,这里对知识产权的影响也