DDD(Domain-Driven Design)领域驱动设计-(二)事件风暴

本节及后边的章节都以实际的例子进行描述,并且完整的按照DDD的流程实现该系统

题目如下:

背景介绍
一个面向学校师生的网上考试系统
需求描述
1.老师可以创建一门课程
	○一门课程包含多个视频和一场考试 (视频仅由老师在google drive的文件夹里进行管理)
	○课程发布之后,学生可以观看视频学习课程和参加考试
2.老师可以维护一个已存在的考试题库
	○题库里面会有很多题目,目前只有填空题
	○老师可以浏览,创建,删除和修改题库中的题目
3.老师可以通过选择题库中的题目来创建试卷
	○一张试卷由多道题目构成
4.老师可以修改试卷
5.老师可以在课程中创建一场考试
	○一场考试包含一张试卷
	○学生可以在规定日期之内开始作答试卷
	○一场考试不得超过两个小时
	○考试中的试卷的总分必须是100分
	○考试试卷的题目数量在5-20道之间
	○试卷中不能出现相同的题目
6.学生可以答卷
	○答卷要发答题纸
	○学生在开始答卷后,需要在规定时间内完成考试
	○学员答卷后,分数由系统自动判别得出
7.题库中的题目发生变化后,未添加到考试中的试卷也需要发生变化,已经创建的考试中的试卷不会发生变化
8.阅卷在答卷后触发
9.考试成绩达标,会调用第三方证书服务(RESTful)生成证书
	○证书只会生成一次
	○证书中包含课程名称
10.老师可以查看报表统计数据
	○成绩区间统计
	○课程通过率统计
术语表

课程:course
题库:quiz bank
填空题:blank quiz
试卷:paper
考试:examination
答题纸:answer sheet
答案:answer
参考答案:reference answer
证书:certification
阅(卷): review
组(卷):assemble
重组(卷):reassemble
分发(答题纸):assign
交(卷):hand in
提交(答案): submit
发布(课程): publish
生成(证书): generate

什么是领域事件

事件风暴中的事件特指领域事件,是领域专家关心的事件,业务上真实发生的事,这件事有业务价值

事件风暴的步骤
  • 1.找出领域事件:橘黄色的便利贴,一个便利贴代表一个事件,采用"something has been done"的形式
  • 2.事件排序:事件需要按照时间顺序排好,不同的事件需要保证相对顺序

这个过程中如果有问题,需要及时与领域专家进行沟通

便利贴

在这里插入图片描述
不同的便利贴的颜色代表不同的意义,本节只会用到橘黄色的事件便利贴,其他颜色的遍历贴后边的设计会用到

事件风暴TIPS
  • 1.事件风暴的输入是业务,表现形式为:用户旅程,Epic
  • 2.事件风暴中的大部分事件会在将来的系统中呈现为系统事件,或者数据库的更改
  • 事件风暴这一步,在事件工作坊中至关重

练习

将上边题目中的事件转换为事件风暴
在这里插入图片描述

回顾上节

DDD的三阶段
从问题出发,逐级抽象,层层深入细化

  • 战略设计
  • 战术设计
  • 技术实现

事件风暴属于战略设计

一共两个压缩分卷,这是第个分卷 第ⅰ部分 让领域模型发挥作用. 第1章 消化知识 5 1.1 有效建模的因素 9 1.2 知识消化 10 1.3 持续学习 11 1.4 知识丰富的设计 12 1.5 深层模型 15 第2章 交流及语言的使用 17 2.1 通用语言 17 2.2 利用对话改进模型 22 2.3 一个团队,一种语言 24 2.4 文档和图 25 2.4.1 书面的设计文档 27 2.4.2 执行的基础 29 2.5 说明性模型 29 第3章 将模型和实现绑定 32 3.1 模型驱动设计 33 3.2 建模范型和工具支持 36 3.3 突出主旨:为什么模型对用户很关键 41 3.4 实践型建模人员 43 .第ⅱ部分 模型驱动设计的构建块 第4章 分离领域 47 4.1 分层架构 47 4.1.1 层间的联系 51 4.1.2 架构框架 51 4.2 模型属于领域层 52 4.3 其他种类的隔离 55 第5章 软件中的模型描述 56 5.1 关联 57 5.2 实体(又称引用对象) 62 5.2.1 实体建模 65 5.2.2 设计标识操作 66 5.3 值对象 68 5.3.1 设计值对象 71 5.3.2 设计包含值对象的关联 73 5.4 服务 74 5.4.1 服务和分隔的领域层 75 5.4.2 粒度 77 5.4.3 访问服务 77 5.5 模块(包) 77 5.5.1 敏捷的模块 79 5.5.2 基础结构驱动打包的缺陷 80 5.6 建模范式 82 5.6.1 对象范式的优势 82 5.6.2 对象世界中的非对象 84 5.6.3 在混合范式中使用模型驱动设计 85 第6章 领域对象的生命周期 87 6.1 聚合 88 6.2 工厂 96 6.2.1 工厂及其应用场所的选择99 6.2.2 只需构造函数的情况 101 6.2.3 接口的设计 102 6.2.4 如何放置不变量的逻辑 103 6.2.5 实体工厂与值对象工厂 103 6.2.6 存储对象的重建 103 6.3 仓储 105 6.3.1 查询仓储 109 6.3.2 了解仓储实现的必要性 111 6.3.3 实现仓储 111 6.3.4 在框架内工作 113 6.3.5 与工厂的关系 113 6.4 为关系数据库设计对象 115 第7章 使用语言:扩展示例 117 7.1 货物运输系统概述 117 7.2 隔离领域:系统简介 119 7.3 区分实体和值对象 120 7.4 运输领域中的关联设计 121 7.5 聚合的边界 123 7.6 选择仓储 124 7.7 场景概述 125 7.7.1 应用特性示例:改变一件货物的目的地126 7.7.2 应用特性示例:重复业务126 7.8 对象的创建 126 7.8.1 cargo的工厂和构造函数 126 7.8.2 添加一个handling event127 7.9 停下来重构:cargo聚合的另一种设计 129 7.10 运输模型中的模块 131 7.11 引入新特性:配额检查 133 7.11.1 连接两个系统 134 7.11.2 改进模型:划分业务 135 7.11.3 性能调整 137 7.12 小结 137 第ⅲ部分 面向更深层解的重构 第8章 突破 143 8.1 关于突破的故事 144 8.1.1 中看不中用的模型 144 8.1.2 突破 146 8.1.3 更深层的模型 148 8.1.4 冷静的决定 149 8.1.5 成效 150 8.2 时机 150 8.3 着眼于根本 151 8.4 尾声:一连串的新理解 151 第9章 隐含概念转变为显式概念 153 9.1 概念挖掘 153 9.1.1 倾听表达用语 154 9.1.2 检查不协调之处 157 9.1.3 研究矛盾之处 162 9.1.4 查阅书籍 162 9.1.5 尝试,再尝试 164 9.2 如何建模不太明显的概念 164.. 9.2.1 显式的约束 165 9.2.2 作为领域对象的流程 167 9.2.3 规格 168 9.2.4 规格的应用和实现 171 第10章 柔性设计 184 10.1 释意接口 186 10.2 无副作用函数 190 10.3 断言 194 10.4 概念轮廓 197 10.5 孤立类 201 10.6 操作封闭 203 10.7 声明性设计 205 10.8 一个声明性风格的设计 207 10.9 攻击角度 215 10.9.1 切分子领域
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值