ENode框架Conference案例分析系列之 - 业务简介
前言
ENode是一个应用开发框架。通过ENode,我们可以方便的开发基于DDD+CQRS+EventSourcing+EDA架构的应用程序。之前我已经写了很多关于ENode的架构以及设计原理的文章,但是因为没有和具体的例子结合来进行分析,所以可能很多人还是无法理解ENode的功能和设计。所以,接下来,我想通过一个较为完整的案例来一步步从业务分析到领域模型设计再到代码实现,以案例的方式讲解ENode如何帮助我们落实DDD的编码实现。
本文是这个系列的第一篇,所以需要先介绍这个案例的一些业务。
前段时间,我用业余时间开发了一个DDD的案例,叫Conference。它是一个支持多租户的会议管理和预定的系统。这个项目不是我个人想出来的,而是微软的一个CQRS实践的一个开源项目,项目主页:http://cqrsjourney.github.io/
Conference业务简介
Conference是这样一个系统,它提供了一个在线创建会议以及预订会议座位的平台。这个系统的用户有两类:1)客户,可以创建和管理会议;2)会议座位预定者,可以预订会议座位。具体的关键业务描述如下:
- 客户创建一个会议,并录入会议的基本信息,比如名称、时间段、地点,等;会议创建后,系统会为客户自动生成一个AccessCode,客户可以通过AccessCode访问自己创建的会议;
- 客户定义某个会议的座位类型,可以定义多个,每个座位类型包含的信息有:名称、座位价格、座位数量;
- 客户发布或取消发布某个会议,当一个会议发布后,预订者就可以在线预订会议的座位了;如果取消发布,则该会议对预订者不可见;只有未发布状态的会议才能修改;
- 预订者在预订会议座位时,会生成订单,订单需要进行支付才会生效;
- 订单生成后,预订者可以有15分钟的时间付款,超过15分钟,订单预定的座位就会回收,允许其他人预定;
- 订单生成后,系统会为预订者生成一个AccessCode,用户可以通过AccessCode查看自己的订单;
- 预订者成功预订了座位后,可以指定每个座位的实际参会人信息;
- 客户(会议的Owner)可以管理他创建的每个会议的所有订单,比如可以查看该会议的所有订单以及参会人信息,以方便联系参会人;
结束语
通过上面的业务介绍,我们不难理解,这个系统本质是一个简易的电子商务系统。它提供了商品管理、下订单、支付三大功能。大家可以看到,这个系统没有用户注册、登录的业务,而是简单的采用AccessCode来让用户访问自己的数据,因为这是一个学习案例。我之所以选择这个案例来进行分析,就是因为大家一般对电子商务系统的业务相对比较熟悉,这样我们讨论就有了一定的基础。下一篇文章,我想从DDD的角度,分析如何进行战略设计(划分子域以及BC)和战术设计(建立领域模型)。
ENode框架Conference案例分析系列之 - 业务简介的更多相关文章
- ENode框架Conference案例分析系列之 - 文章索引
ENode框架Conference案例分析系列之 - 业务简介 ENode框架Conference案例分析系列之 - 上下文划分和领域建模 ENode框架Conference案例分析系列之 - 架构设 ...
- ENode框架Conference案例分析系列之 - 架构设计
Conference架构概述 先贴一下Conference案例的在线地址,UI因为完全拿了微软的实现,所以都是英文的,以后我有空再改为中文的. Conference后台会议管理:http://www. ...
- ENode框架Conference案例分析系列之 - 订单处理减库存的设计
前言 前面的文章,我介绍了Conference案例的业务.上下文划分.领域模型.架构,以及代码整体流程.接下来想针对案例中一些重要的场景,分别做进一步的分析.本文想先介绍一下Conference案例的 ...
- ENode框架Conference案例分析系列之 - Quick Start
前言 前一篇文章介绍了Conference案例的架构设计,本篇文章开始介绍Conference案例的代码实现.由于代码比较多,一开始就全部介绍所有细节,估计很多人接受不了,也理解不了.所以,我先进行一 ...
- ENode框架Conference案例分析系列之 - 复杂情况的读库更新设计
问题背景 Conference案例,是一个关于在线创建会议(类似QCon这种全球开发者大会).在线管理会议位置信息.在线预订某个会议的位置的,这样一个系统.具体可以看微软的这个项目的主页:http:/ ...
- ENode框架Conference案例分析系列之 - 事件溯源如何处理重构问题
前言 本文可能对大多数不太了解ENode的朋友来说,理解起来比较费劲,这篇文章主要讲思路,而不是一上来就讲结果.我写文章,总是希望能把自己的思考过程尽量能表达出来,能让大家知道每一个设计背后的思考的东 ...
- ENode框架Conference案例分析系列之 - 上下文划分和领域建模
前面一片文章,我介绍了Conference案例的核心业务,为了方便后面的分析,我这里再列一下: 业务描述 Conference是这样一个系统,它提供了一个在线创建会议以及预订会议座位的平台.这个系统的 ...
- ENode框架Conference案例分析系列之 - ENode框架初始化
前言 Conference案例是使用ENode框架来开发的.之前我没有介绍过ENode框架是如何启动的,以及启动时要注意的一些点,估计很多人对ENode框架的初始化这一块感觉很复杂,一头雾水.所以,本 ...
- ENode框架Conference案例转载
ENode框架Conference案例分析系列之 - Quick Start 前言 前一篇文章介绍了Conference案例的架构设计,本篇文章开始介绍Conference案例的代码实现.由于代码比较 ...
随机推荐
- tornado高效开发必备之源码详解
前言:本博文重在tornado源码剖析,相信读者读完此文能够更加深入的了解tornado的运行机制,从而更加高效的使用tornado框架. 本文参考武sir博客地址:http://www.cnblog ...
- Quart.NET实施参考
参考 1.博客园: http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.html 2.官网:http://www.cnblogs.co ...
- windows 查看软件是32位还是64位
我有一个配置挺好的电脑,win10 64位的系统,但是最近下载的一个软件用着巨慢,导致我严重想知道下载的软件是64位的还是32位的 百度谷歌了很久,大多数都说是两个方法: 1. 判断文件的安装路径,如 ...
- linux高级编程补充知识
F: 计算机系统结构: ------------------------------- 应用程序 ----------------- | 库函数 -------------------------- ...
- linux中redis安装
一.登录redis官网下载redis-3.0.7.tar.gz 二.通过ftp工具上传至自己的服务器中 三.tar -zxvf redis-3.0.7.tar.gz解压 四.cd redis-3.0. ...
- 解决ScrollView 嵌套 GridView 单行显示问题
简单重写GridView package com.hh.beauter.my_ui; import android.content.Context; import android.util.Attri ...
- js中的 || 与 && 运算符 的使用
&&和||总是傻傻分不清,在这里详细记录一下吧.也给你们分享一下. 表达式a && 表达式b : 计算表达式(或者函数)a的运算结果, 如果为 True, 执行表达式 ...
- [资料分享]7天搞定Node.js微信公众号开发
- 简述HTML DOM及其节点分类
在JavaScript中,document这个对象大家一定很熟悉,哪怕是刚刚开始学习的新人,也会很快接触到这个对象.而document对象不仅仅是一个普通的JavaScript内置对象,它还是一个巨大 ...
- SVG文件:从Illustrator导文件到Web
可缩放矢量图形(SVG)是早在1998年就已经有的一种矢量图像格式.它总是和Web一起发展,但是直到现在才开始赶上Web发展的步伐.如今我们已经不能否认SVG和Web的相关性,所以让我们来学习一下从I ...