领域驱动开发(domain driven development)
链接: https://www.zhihu.com/question/56332619/answer/250971065
什么是领域驱动开发
将问题抽象为一个领域解决方案。并针对此领域(即抽象)进行开发的方式。
领域驱动开发解决了什么问题
解决两个问题1,变化。2,复杂度。
原则上适用于任何软件,特别适用于一些特别复杂,变化特别频繁的系统——尤其是迭代很快又很复杂的稳定要求又很高的互联网金融核心系统。
在这些业务系统中,常常糅合了支付,账务,会计等多业务领域的知识;同时糅合了通讯,协议,安全,编码等多种技术领域知识;如果涉及到多系统对接,甚至还要常常面临多种不同的解决方案的整合。
怎么办?
1,问题分层,转化为业务领域,技术领域。通过协议或者接口先屏蔽技术上的差异性。各层只关注自己的问题。
2,问题分块,同层问题转化为A,B,C等不同业务领域;定义他们彼此服务整合的方式。
3,关注要素,忽略细节 ;关注抽象,忽略具体;……
————————其实就是分而治之,化繁为简;抓住主要矛盾的过程。
领域驱动开发的威力
领域模型的核心是抽象和分治(less is more)
例子1:linux很神奇的管道的原理么(命令通过|无限组装)?
1,任何io操作都是文件
2,任何文件有三个默认io方向(stdin,stdout,stderror)
3,pipe的作用是链接上下文件,转化stdout stdin
ls *|grep abc 的底层原理就是
ls * (输出到stdout) (转化上一个的stdout为下一个的stdin) grep abc( 从stdin)
顺便说一下 不单单你看到的文件 linux下几乎啥都是file(命令,设备……),你想想这样玩的威力吧
再说一下应对复杂度的威力,说一下金融届有名的三户模型
卡客账,卡即支付工具的抽象,客即人的抽象,账即资金的抽象。
1,存折换成卡,卡换成app,核心不需要任何变动
2,红包,优惠券,信贷账户怎么玩?其实就是账户之间增加父子结构而已。
(红包,优惠券,信贷账户特征是有额度;但都是假的,真实发生交易的时候才操作真实资金账户;其他情况下不作为资金处理:解决方案就是设置父子账户,子账户即使红包信贷账户,对子账户的操作实际操作的是户账户资金。不需要开发)
这三户模型的抽象,也有助于解决金融产品一些快速的创新和复杂的产品设计——前提是开发和产品理解这个抽象,我真见过再设计一大套红包,信贷账户表,搞一大堆专门处理他们逻辑差异性的金融系统——这样就导致整天忙死了,并且问题不断。
人的抽象在支付上用处不大,但是在风控上意义重大。风控的本质上就是对人的理解和博弈。不论啥卡欺诈,账户欺诈,设备……最终都是要挂到这个概念上的,不论任何规则,模型,也最终都要落实到这个模型上的。
卡客账:金融业务和金融风险的完美建模有没有。
领域模型开发要注意那些
- 领域划分,定义
- 概念定义
- 概念职责,行为,服务
- 概念之间关系
- 应对变化
这就是领域驱动开发。相对于具体业务驱动开发而言的。
领域驱动开发(domain driven development)相关推荐
- 从零开始使用CodeArt实践最佳领域驱动开发(三)
5.领域模型设计 在开始考虑如何构建账户子系统的领域模型之前,我们先来看看关于CA里领域模型的基本概念.初次接触这些陌生的概念确实会一知半解,不过没有关系,大家实践几次领域设计后就会融会贯通,深刻体会 ...
- Transformer课程 业务对话机器人Rasa 3.x 会话驱动开发(Conversation-Driven Development)
Transformer课程 业务对话机器人Rasa 3.x 会话驱动开发(Conversation-Driven Development) Rasa 官网 https://rasa.com/ Conv ...
- DDD领域驱动开发概念介绍及简单示例
什么是领域驱动模型? 2004年Eric Evans 发表<领域驱动设计--软件核心复杂性应对之道>(Domain-Driven Design –Tackling Complexity i ...
- 实施领域驱动设计(Implementing Domain Driven Design翻译)
实施领域驱动设计(Implementing Domain Driven Design翻译) 引言 介绍 这是实现领域驱动的实用指南设计(DDD).虽然实现细节依赖于ABP 框架基础设施,但是核心概念. ...
- 领域驱动设计的实践 – CQRS Event Sourcing
1.前言 领域驱动(Domain – Driven Design)设计的理念在于建立一系列既符合软件所处领域本身又适合软件分析开发需要的领域模型.命令查询与职责分离(Command Query Res ...
- 敏捷开发系列之旅 第三站(认识FDD特征驱动开发)
上篇文章中,我们探讨了什么是XP极限编程,以及极限编程的管理思想.核心价值观等等.在敏捷开发之旅的第三站,我想要和大家一起分享FDD特征驱动开发方法. 特征驱动开发--Feature Driven D ...
- 读张逸的领域驱动设计笔记
2019独角兽企业重金招聘Python工程师标准>>> 张逸的<领域驱动战略设计实战>地址,付费的,价格¥59,还能接受. 领域驱动设计可能会给你带来的收获,下面几点来自 ...
- 优美的测试代码 - 行为驱动开发(BDD)
可理解的代码非常重要,测试代码也是如此.在我看来,优秀的测试代码,必须做到一个重要的事情就是保持测试逻辑的清晰.一个完整的测试案例通常包括三个部分: 1. SetUp 2. Exercise 3. V ...
- 架构师速成6.8-设计开发思路-领域驱动
领域驱动设计简称DDD,很好的名字,先来普及一下相关的名词缩写: 测试驱动设计 TDD,行为驱动设计 BDD,面向对象设计 OOD,面向过程设计 OPD. 设计思路和方法是一项专门的技能,区别于设计模 ...
最新文章
- MEMS传感器作为变革的驱动力
- DevExpress的下拉框控件LookUpEdit的使用、添加item选项值、修改默认显示值
- 图片上传unexpected end of stream
- Kylin启动报错hbase-common lib not found
- lower版购物车模拟
- android8 测试,Android 8.0 Oreo 国内可用测试平台上线
- c语言编译如何去掉warning,16种C语言编译警告(Warning)类型的解决方法
- PHP压缩CSS文件
- html5 加入收藏夹,设为首页、添加到收藏夹代码
- 浙大PAT 1013题 1013. Battle Over Cities
- PHP做大转盘抽奖的思路,PHP实现大转盘抽奖算法(代码实例)
- linux连接小米随身wifi密码忘记了,小米路由器无线密码(wifi密码)忘记了怎么办?...
- 故宫夜景门票最高炒至9999元 官方:二手票难以入场
- Mac Edge 浏览器开启几秒后自动关闭问题
- python+编译器 下载、安装
- Mac 上使用 SAS 的 2 种方法
- 自动获取指定路径文件夹,删除文件夹及子文件
- 51nod 1920 空间统计学 动态规划
- Keil4的下载程序后窗口闪退,程序保存失败
- 2.特定领域知识图谱融合方案:文本匹配算法之预训练Simbert、ERNIE-Gram单塔模型等诸多模型【三】