当前位置:网站首页>国内酒店交易DDD应用与实践——代码篇
国内酒店交易DDD应用与实践——代码篇
2022-07-04 12:49:00 【InfoQ】
一、酒店交易采用的四层 DDD 松散架构

- 用户接口层:用户接口层只用于处理用户显示和用户请求和数据的渲染展现,不应该包含领域或业务逻辑(业务逻辑在领域设计中有明确的定义、业务指流程或行为或一个动作发生一定要产生推动下一个行为或动作的过程是业务,页面渲染、检索类并不属于业务逻辑);
- 应用层:应用服务位于应用层中。应用服务用于控制持久化事务和安全认证。应用服务本身并不处理业务逻辑,应用服务是轻量级,主要用于协调对领域对象的操作, 应用服务的通常用途是:接收来自用户界面的输入参数,再通过资源库获取到聚合实例,然后执行相应的命令操作;
- 领域层:或称为模型层,负责表达业务概念和业务状态信息以及业务规则。该领域(问题域)完成所有复杂的业务知识抽象和规则定义;
- 基础设施层:一是为领域模型提供持久化机制;
二、DDD实施与代码落地

1、酒店交易通用语言构建

2、四层架构代码实现
2.1 用户接口层代码实现示例(订单)

2.2 应用层代码实现示例(订单)

2.3 领域层代码实现示例(订单)
- 聚合根 是实体,具备唯一标识,有独立的生命周期,一个聚合只有一个聚合根,聚合根负责聚合之内实体和值对象组织和协调变更,不允许绕过聚合根直接访问聚合内实体进行交互,这样会导致聚合处于不一致状态,违背聚合不变条件的原则,在设计聚合根时要遵守一定原则;
- 聚合根到聚合根:通过ID关联;
- 聚合根到其内部的实体,直接对象引用;
- 聚合根到值对象,直接对象引用;
- 公开行为接口 显示的表达领域概念,作为外部通信的入口,只有聚合根才能被外部访问到,聚合根维护聚合的内部一致性;
- 领域服务表示一个无状态的操作,它用于实现特定于某个领域的任务。当某个动作不适合放在聚合对象上时,可以使用领域服务。


- 唯一标识
- 生命周期有状态
- 体现相关业务行为

2.4 资源层代码实现示例
- 【一致性原则】
- 【保持不变条件】
- 【一个事务只修改一个聚合】
- 【小聚合】






小结
- 酒店交易通用语言构建展示
- 用户接口层代码实现、
- 应用层代码实现和原则;
- 订单聚合根代码实现、如何保障聚合内一致性、工厂代码实现示例
- 资金实体代码实现
- 订单仓储代码实现、仓储层方法定义标准
- 聚合间一致性原则与代码实现、如何保障多个聚合一致性
边栏推荐
- C语言程序设计
- How to choose a technology stack for web applications in 2022
- 源码编译安装MySQL
- 面试拆解:系统上线后Cpu使用率飙升如何排查?
- 分布式BASE理论
- #yyds干货盘点# 解决名企真题:连续最大和
- 美国土安全部长:国内暴力极端主义是目前美面临的最大恐怖主义威胁之一
- 2022KDD预讲 | 11位一作学者带你提前解锁优秀论文
- 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
- Automatic filling of database public fields
猜你喜欢

JVM系列——栈与堆、方法区day1-2

HAProxy高可用解决方案

面试官:Redis中哈希数据类型的内部实现方式是什么?

Dgraph: large scale dynamic graph dataset

Node の MongoDB安装

Doctoral application | West Lake University Learning and reasoning system laboratory recruits postdoctoral / doctoral / research internship, etc

Haproxy high availability solution

嵌入式编程中五个必探的“潜在错误”

JVM series - stack and heap, method area day1-2

2022 Shandong Province safety officer C certificate examination question bank and online simulation examination
随机推荐
js中的变量提升和函数提升
分布式BASE理论
好博医疗冲刺科创板:年营收2.6亿 万永钢和沈智群为实控人
结合案例:Flink框架中的最底层API(ProcessFunction)用法
使用默认路由作为指向Internet的路由
舔狗舔到最后一无所有(状态机)
MySQL45讲——学习极客时间MySQL实战45讲笔记—— 06 | 全局锁和表锁_给表加个字段怎么有这么多阻碍
C foundation in-depth study I
美国土安全部长:国内暴力极端主义是目前美面临的最大恐怖主义威胁之一
2022 hoisting machinery command examination simulation 100 questions simulation examination platform operation
美国土安全部部长警告移民“不要踏上危险的旅程”
Understanding and difference between viewbinding and databinding
Three schemes to improve the efficiency of MySQL deep paging query
C语言小型商品管理系统
Secretary of Homeland Security of the United States: domestic violent extremism is one of the biggest terrorist threats facing the United States at present
华昊中天冲刺科创板:年亏2.8亿拟募资15亿 贝达药业是股东
如何在 2022 年为 Web 应用程序选择技术堆栈
【Antd】Antd 如何在 Form.Item 中有 Input.Gourp 时获取 Input.Gourp 的每一个 Input 的value
C#基础深入学习二
Getting started with microservices