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

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

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

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

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

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


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

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






小结
- 酒店交易通用语言构建展示
- 用户接口层代码实现、
- 应用层代码实现和原则;
- 订单聚合根代码实现、如何保障聚合内一致性、工厂代码实现示例
- 资金实体代码实现
- 订单仓储代码实现、仓储层方法定义标准
- 聚合间一致性原则与代码实现、如何保障多个聚合一致性
边栏推荐
猜你喜欢
结合案例:Flink框架中的最底层API(ProcessFunction)用法
30:第三章:开发通行证服务:13:开发【更改/完善用户信息,接口】;(使用***BO类承接参数,并使用了参数校验)
近日小结(非技术文)
2022年山东省安全员C证考试题库及在线模拟考试
上汽大通MAXUS正式发布全新品牌“MIFA”,旗舰产品MIFA 9正式亮相!
. Net delay queue
【R语言数据科学】:交叉验证再回首
2022年起重机械指挥考试模拟100题模拟考试平台操作
2022g3 boiler water treatment examination question simulation examination question bank and simulation examination
2022危险化学品经营单位主要负责人练习题及模拟考试
随机推荐
Node の MongoDB 安装
C language staff management system
好博医疗冲刺科创板:年营收2.6亿 万永钢和沈智群为实控人
Optional values and functions of the itemized contenttype parameter in the request header
OPPO Find N2产品形态首曝:补齐各项短板
Web知识补充
Openharmony application development how to create dayu200 previewer
js中的变量提升和函数提升
Node mongodb installation
C语言宿舍管理查询软件
SQL language
德明利深交所上市:市值31亿 为李虎与田华夫妻档
XML入门一
苹果5G芯片研发失败:继续依赖高通,还要担心被起诉?
C#基础补充
205. 同构字符串
Database lock table? Don't panic, this article teaches you how to solve it
上汽大通MAXUS正式发布全新品牌“MIFA”,旗舰产品MIFA 9正式亮相!
程序员转方向
Source code compilation and installation of MySQL