什么是DDD?DDD是什么简称 ?DDD缩写含义
领域模型(domain model)是对领域内的概念类或现实世界中对象的可视化表示。领域模型也称为概念模型、领域对象模型和分析对象模型。
——《UML和模式应用》
我们在日常开发中,经常针对一些功能点争论“这个功能不应该我改,应该是你那边改”,最终被妥协改了之后都改不明白为什么这个功能要在自己这边改。区别于传统的架构设计,领域驱动设计(DDD)也许在这个时候能帮助你做到清晰的划分。
什么是DDD
领域驱动设计最初由Eric Evans提出,但是多年以来一直停留在理念阶段,真正能实现并且落地的项目和公司少之又少,而进来阿里内部其实在大力推行DDD的理念,它主要可以帮助我们解决传统单体式集中架构难以快速响应业务需求落地的问题,并且针对中台和微服务盛行的场景做出指导。
DDD为我们提供的是架构设计的方法论,既面向技术也面向业务,从业务的角度来把握设计方案。
DDD的作用
统一思想:统一项目各方业务、产品、开发对问题的认知,而不是开发和产品统一,业务又和产品统一从而产生分歧。
明确分工:域模型需要明确定义来解决方方面面的问题,而针对这些问题则形成了团队分钟的理解。
反映变化:需求是不断变化的,因此我们的模型也是在不断的变化的。领域模型则可以真实的反映这些变化。
边界分离:领域模型与数据模型分离,用领域模型来界定哪些需求在什么地方实现,保持结构清晰。
DDD的概念
实体
有唯一标志的核心领域对象,且这个标志在整个软件生命周期中都不会发生变化。这个概念和我们平时软件模型中和数据库打交道的Model实例比较接近,唯一不同的是DDD中这些实体会包含与该实体相关的业务逻辑,它是操作行为的载体。
值对象
依附于实体存在,通过对象属性来识别的对象,它将一些相关的实体属性打包在一起处理,形成一个新的对象。
举个栗子:比如用户实体,包含用户名、密码、年龄、地址,地址又包含省市区等属性,而将省市区这些属性打包成一个属性集合就是值对象。
聚合
实体和值对象表现的是个体的能力,而我们的业务逻辑往往很复杂,依赖个体是无法完成的,这时候就需要多个实体和值对象一起协同工作,而这个协同的组织就是聚合。聚合是数据修改和持久化的基本单元,同一个聚合内要保证事务的一致性,所以在设计的时候要保证聚合的设计拆分到最小化以保证效率和性能。
聚合根
也叫做根实体,一个特殊的实体,它是聚合的管理者,代表聚合的入口,抓住聚合根可以抓住整个聚合。
领域服务
有些领域的操作是一些动词,并不能简单的把他们归类到某个实体或者值对象中。这样的行为从领域中识别出来之后应该将它声明成一个服务,它的作用仅仅是为领域提供相应的功能。
领域事件
在特定的领域由用户动作触发,表示发生在过去的事件。比如充值成功、充值失败的事件。
四种模式
失血模型
模型中只有简单的get set方法,是对一个实体最简单的封装,其他所有的业务行为由服务类来完成。
@Data
@ToString
publicclassUser{
privateLongid;
privateStringusername;
privateStringpassword;
privateIntegerstatus;
privateDatecreatedAt;
privateDateupdatedAt;
privateIntegerisDeleted;
}
publicclassUserService{
publicbooleanisActive(Useruser){
returnuser.getStatus().equals(StatusEnum.ACTIVE.getCode());
}
}
贫血模型
在失血模型基础之上聚合了业务领域行为,领域对象的状态变化停留在内存层面,不关心数据持久化。
@Data
@ToString
publicclassUser{
privateLongid;
privateStringusername;
privateStringpassword;
privateIntegerstatus;
privateDatecreatedAt;
privateDateupdatedAt;
privateIntegerisDeleted;
publicbooleanisActive(Useruser){
returnuser.getStatus().equals(StatusEnum.ACTIVE.getCode());
}
publicvoidsetUsername(Stringusername){
returnusername.trim();
}
}
充血模型
在贫血模型基础上,负责数据的持久化。
@Data
@ToString
publicclassUser{
privateLongid;
privateStringusername;
privateStringpassword;
privateIntegerstatus;
privateDatecreatedAt;
privateDateupdatedAt;
privateIntegerisDeleted;
privateUserRepositoryuserRepository;
publicbooleanisActive(Useruser){
returnuser.getStatus().equals(StatusEnum.ACTIVE.getCode());
}
publicvoidsetUsername(Stringusername){
this.username=username.trim();
userRepository.update(user);
}
}
胀血模型
service都不需要,所有的业务逻辑、数据存储都放到一个类中。
对于DDD来说,失血和胀血都是不合适的,失血太轻量没有聚合,胀血那是初学者才这样写代码。那么充血模型和贫血模型该怎么选择?充血模型依赖repository接口,与数据存储紧密相关,有破坏程序稳定性的风险。
建模方法
用例分析法
用例分析法是领域建模最简单可行的方式。大致可以分为获取用例、收集实体、添加关联、添加属性、模型精化几个步骤。
获取用例:提取领域规则描述
收集实体:定位实体,
添加关联:两个实体间用动词关联起来
添加属性:获取实体属性
模型精化:可选的步骤,可以用UML的泛华和组合来表达模型间的关系,同时可以做子领域的划分
四色建模法
四色建模法源于《Java Modeling In Color With UML》,它是一种模型的分析和设计方法,通过把所有模型分为四种类型,帮助模型做到清晰、可追溯。
简单来说,四色关注的是某个人的角色在某个地点的角色用某个东西的角色做了某件事情。
事件风暴法
事件风暴法类似头脑风暴,简单来说就是谁在何时基于什么做了什么,产生了什么,影响了什么事情。
架构分层
区别于左图传统架构的分层,一般DDD分层会有一些变化。
Application:包含事件注册、业务逻辑等
Domain:聚合、实体、值对象
InfraStructure:基础设施封装、数据库访问等
总结
DDD是一套完善的方法论,他能帮助我们合理的对系统进行架构设计,同时,好的模板应该是在不断的适应变化,而DDD也能帮助我们更快速更方便的支撑业务的发展。
相关推荐:
最新新闻:
- 核能的优点有哪些? 为什么核能威力那么大?
- 什么是DDD?DDD是什么简称 ?DDD缩写含义
- 今热点:结对党建 共筑乡村振兴“腾飞路”
- 上行速率和下行速率是什么意思?决定网速的是上行还是下行?
- 冒险岛怎么去天空之城?冒险岛天空之城任务攻略大全
- 英雄联盟沙漠死神如何出装?沙漠死神出装推荐
- 街头篮球网页仓库在哪里?街头篮球手游PF技能选择推荐
- 斗战神封魂之戒怎么获得?斗战神隐藏任务大全
- 仙剑3龙葵结局是什么?仙剑三游戏完整剧情
- 内存小的网游有哪些?内存超小的游戏排行榜单
- win2003的序列号是多少?如何激活windows2003?
- 电脑显卡正常温度范围是多少?一般显卡温度多少正常?
- 更新显卡驱动有什么好处?显卡驱动能随便更新吗?
- 全球快看:从招聘流程再造到数据出境安全评估 金融机构“备战”个人信息合规操作
- ce怎么修改数量1的道具?CE修改器的使用方法
- 邮箱提示0x800ccc0f怎么解决?0x800ccc0f邮箱错误怎么办?
- md5是什么意思怎么看?md5值怎么查看?
- 魔兽真三地图有什么特点?魔兽争霸3地图包大全
- cf窗口模式怎么调整窗口大小?cf窗口化怎么调尺寸变大?
- 三星r428的Fn键关机后失效怎么办?笔记本fn键失效如何解决?
- 什么是网络设备?常见的网络设备包括哪些?
- 网站还原错误是怎么回事?浏览器提示网站还原错误解决对策
- 电流麦是什么原因造成的?怎样消除麦克风的滋滋声?
- 显卡花屏什么原因?显卡雪花屏是怎么回事?
- 内存盘是不是u盘?电脑的内存条和硬盘的区别是什么?
- 天龙八部2级钓鱼位置在哪?天龙八部钓鱼等级分布
- 网线线序如何排序?正确的网线的顺序图
- 暗黑3技能游戏设定是什么?暗黑3卡奈魔盒怎么获得?
- 天天报道:《暗黑4》抢先玩家没有限定坐骑饰品 暴雪:仅限B测
- 全球看点:美媒:布林肯宣布美将增设中东高级外交职位
- 苹果宣布新版Safari浏览器:这是世界上最快的浏览器
- 女人每天喝蜂蜜水会长胖吗?这一误区要早知道! 世界快报
- “3499美元的苹果头显值得买吗?”冲上热搜 用户:太贵买不起 全球今热点
- 全球消息!白金工作室《神奇101重制版》Steam国区价格暴涨
- 天天报道:Switch在线新追加游戏上线 《巴比伦塔》等4款经典名作
- 【全球播资讯】大洋电机:未来技术路线可能是少用重稀土 多用轻稀土
- 孙俪代言!超能双离子洗衣粉骨折价大促:39.9元11斤 新动态
- 冀东水泥与海淀区市政集团等签署战略合作协议
- 天天头条:5月董监高增减持动态:增持总额环比上升175% 中矿资源、美迪西减持金额居前
- 减产措施支撑国际油价上涨 美国经济数据疲软基本金属多数下跌
- 视点丨高考房要定“985”“211”?讨口彩不如稳心态
- 苹果Mac三大新品国行价格汇总:巅峰顶配9.7万元! 世界头条
- 【聚焦618】618淘宝好价节正式上线 定向补贴中小商家 热点评
- 环球快讯:凡拓数创6月6日快速上涨
- 《拾光集》steam页面上线 游戏预计今年第四季度发售_世界速看料
- 天天速看:《最终幻想16》全新截图 画面绚丽角色逼真
- 《暗黑破坏神4》莉莉丝MV Halsey联手闵玧其献唱
- 淄博张店烧烤倡议高考停业三天 网友点赞:格局大 全球快报
- 天天精选!iOS 17正式发布!全新来电海报、横屏待机模式惊艳
- 【环球播资讯】松江这个社区启动外墙修缮,旧房焕新指日可待
- 【环球播资讯】松江这个社区启动外墙修缮,旧房焕新指日可待
- 今日快看!镇巴县气象台发布大雾橙色预警【Ⅱ级/严重】【2023-06-06】
- 发挥中青年医生力量 探索食管癌诊疗“中国方案”|环球快报
- 骁龙8 gen3今年提前了!-全球微资讯
- 16499元起!新款苹果Mac Studio国行售价公布
- 世界信息:苹果 推出 15 英寸 MacBook Air:起售价10499 元
- 搭载自研芯片 Apple 发布新款 Mac Studio以及Mac Pro_全球新消息
- 苹果头显Vision Pro吓跌股价6000亿! 全球今亮点
- 圆梦凯旋|神舟十五号乘组返回全纪实
- 全球速读:气温升高,这项业务太火爆!团购订单量猛增500%!
- 世界快报:刘禹锡字什么什么代文学家有什么之称_刘禹锡字什么
- 业主买42套房欲打通 楼上墙壁现裂缝
- 每日简讯:苹果正式公布Vision Pro AR头显 起价3499美元
- 冒险游戏《腐朽之馆》Steam页面上线 发售日期待定
- 夏季游戏速通大会SGDQ筹得220万美元善款
- [002375亚厦股份]上市公司私有化股票会涨吗|世界最新
- 新农合大病保险怎么报销?报销需要哪些材料?
- 丽水多地通告:临时管制,请绕行!
- 炒芹菜牛肉丛怎么做? 全球聚焦
- 【天天新要闻】沪深股通|莱宝高科6月5日获外资买入0.07%股份
- 大连海关签发首份 对菲律宾RCEP原产地证书
- 焦点精选!王牌战士爆风安妮天赋怎么点 接下来一起来看看吧
- 苹果发新款MacBook Air:15英寸轻薄大屏 M2芯片|世界百事通
- 32999元 苹果Mac Studio发布:M2 Ultra首发
- 天天速读:苹果Mac Studio国行售价公布:32999元
- 焦点热讯:如懿传语录经典台词 如懿传经典台词
- 焦点!苹果Vision Pro头显发布 5000项专利 替代iPhone?
- 仙佑膏药:市场竞争膏药产业市场格局 企业竞争能力剖析
- 天天微资讯!苹果发布最强芯片M2 Ultra,强在哪?
- 手机运行速度慢什么原因(手机运行速度慢)
- TGA主持人:E3自己杀死了自己-环球新要闻
- 笄怎么读拼音视频_笄怎么读简介介绍|视讯
- 全球要闻:《死亡搁浅》等小岛秀夫游戏将登陆苹果设备
- 《巫师》第三季新预告将在夏季游戏节上播出
- 热门看点:全面注册制是什么意思 详解全面注册制对A股市场的影响及实施的意义