当前位置:网站首页>国内酒店交易DDD应用与实践——代码篇
国内酒店交易DDD应用与实践——代码篇
2022-07-04 12:49:00 【InfoQ】
一、酒店交易采用的四层 DDD 松散架构
- 用户接口层:用户接口层只用于处理用户显示和用户请求和数据的渲染展现,不应该包含领域或业务逻辑(业务逻辑在领域设计中有明确的定义、业务指流程或行为或一个动作发生一定要产生推动下一个行为或动作的过程是业务,页面渲染、检索类并不属于业务逻辑);
- 应用层:应用服务位于应用层中。应用服务用于控制持久化事务和安全认证。应用服务本身并不处理业务逻辑,应用服务是轻量级,主要用于协调对领域对象的操作, 应用服务的通常用途是:接收来自用户界面的输入参数,再通过资源库获取到聚合实例,然后执行相应的命令操作;
- 领域层:或称为模型层,负责表达业务概念和业务状态信息以及业务规则。该领域(问题域)完成所有复杂的业务知识抽象和规则定义;
- 基础设施层:一是为领域模型提供持久化机制;
二、DDD实施与代码落地
1、酒店交易通用语言构建
2、四层架构代码实现
2.1 用户接口层代码实现示例(订单)
2.2 应用层代码实现示例(订单)
2.3 领域层代码实现示例(订单)
- 聚合根 是实体,具备唯一标识,有独立的生命周期,一个聚合只有一个聚合根,聚合根负责聚合之内实体和值对象组织和协调变更,不允许绕过聚合根直接访问聚合内实体进行交互,这样会导致聚合处于不一致状态,违背聚合不变条件的原则,在设计聚合根时要遵守一定原则;
- 聚合根到聚合根:通过ID关联;
- 聚合根到其内部的实体,直接对象引用;
- 聚合根到值对象,直接对象引用;
- 公开行为接口 显示的表达领域概念,作为外部通信的入口,只有聚合根才能被外部访问到,聚合根维护聚合的内部一致性;
- 领域服务表示一个无状态的操作,它用于实现特定于某个领域的任务。当某个动作不适合放在聚合对象上时,可以使用领域服务。
- 唯一标识
- 生命周期有状态
- 体现相关业务行为
2.4 资源层代码实现示例
- 【一致性原则】
- 【保持不变条件】
- 【一个事务只修改一个聚合】
- 【小聚合】
小结
- 酒店交易通用语言构建展示
- 用户接口层代码实现、
- 应用层代码实现和原则;
- 订单聚合根代码实现、如何保障聚合内一致性、工厂代码实现示例
- 资金实体代码实现
- 订单仓储代码实现、仓储层方法定义标准
- 聚合间一致性原则与代码实现、如何保障多个聚合一致性
边栏推荐
- 基于STM32+华为云IOT设计的酒驾监控系统
- 舔狗舔到最后一无所有(状态机)
- SQL language
- Fs7867s is a voltage detection chip used for power supply voltage monitoring of digital system
- Scripy framework learning
- Redis —— How To Install Redis And Configuration(如何快速在 Ubuntu18.04 与 CentOS7.6 Linux 系统上安装 Redis)
- XILINX/system-controller-c/BoardUI/无法连接开发板,任意操作后卡死的解决办法
- 分布式BASE理论
- C语言个人通讯录管理系统
- 数据库公共字段自动填充
猜你喜欢
2022危险化学品经营单位主要负责人练习题及模拟考试
锐成芯微冲刺科创板:年营收3.67亿拟募资13亿 大唐电信是股东
一次 Keepalived 高可用的事故,让我重学了一遍它
2022G3锅炉水处理考试题模拟考试题库及模拟考试
MySQL45讲——学习极客时间MySQL实战45讲笔记—— 06 | 全局锁和表锁_给表加个字段怎么有这么多阻碍
Oracle 被 Ventana Research 评为数字创新奖总冠军
ASP.NET Core入门一
动画与过渡效果
Detailed explanation of Fisher information quantity detection countermeasure sample code
Automatic filling of database public fields
随机推荐
读取 Excel 表数据
OpenHarmony应用开发之如何创建DAYU200预览器
Redis —— How To Install Redis And Configuration(如何快速在 Ubuntu18.04 与 CentOS7.6 Linux 系统上安装 Redis)
Summary of recent days (non-technical article)
分布式BASE理论
2022危险化学品经营单位主要负责人练习题及模拟考试
. Net using redis
MySQL 45 lecture - learn the actual combat notes of MySQL in Geek time 45 lecture - 06 | global lock and table lock_ Why are there so many obstacles in adding a field to the table
【Antd踩坑】Antd Form 配合Input.Group时出现Form.Item所占据的高度不对
Personalized online cloud database hybrid optimization system | SIGMOD 2022 selected papers interpretation
Go 语言入门很简单:Go 实现凯撒密码
. Net delay queue
C语言集合运算
205. 同构字符串
以房抵债能否排除强制执行
动画与过渡效果
When MDK uses precompiler in header file, ifdef is invalid
硬件基础知识-二极管基础
C#基础深入学习一
#yyds干货盘点# 解决名企真题:连续最大和