旅程1:我们的领域:Contoso会议管理系统

起点:我们从哪里来,我们带来了什么,谁将与我们同行?“

只要前进,我愿意去任何地方。” --大卫•利文斯通

本章介绍了一个虚构的公司Contoso。它描述了Contoso计划推出的会议管理系统,这是一个新的在线服务,可以使其他公司或个人通过此系统组织和管理自己的会议和活动。本章从高层次描述了新系统的一些功能和非功能需求,以及为什么Contoso希望使用CQRS和Event Sourcing实现部分功能。与任何考虑此过程的公司一样,有许多问题需要思考和挑战,特别是这是Contoso第一次同时使用CQRS和Event Sourcing。接下来的章节将逐步展示Contoso是如何设计和构建其会议管理系统的。

另外,本章还介绍了一个虚构的专家小组来评论开发工作。

Contoso公司

Contoso是一家新兴的ISV公司,拥有大约20名员工,专门使用微软技术开发解决方案。Contoso的开发人员熟悉各种微软产品和技术,包括.Net Framework、ASP.NET MVC和Microsoft Azure。一些开发人员以前有使用领域驱动设计(DDD)方法的经验,但是他们以前都没有使用过CQRS模式。

会议管理系统应用程序是Contoso想要推向市场的首批创新在线服务之一。作为一家初创企业,Contoso希望用最少的硬件和IT人员投资来开发和推出这些服务。为了开始扩大市场份额,Contoso想要快速进入市场,但是没有时间实现第一个版本中所有计划的功能。所以,重要的是,它采用的体系结构要能够轻松地适应更改和增强,同时对系统的现有用户的影响最小。Contoso选择将应用程序部署在Azure上,以利用其随需求增长而扩展应用程序的能力。

这次CQRS之旅谁将和我们同行

如前所述,本指南和随附的参考实现里描述了这次CQRS之旅。一个专家小组将在我们进行的过程中对我们的开发工作发表意见。其中包括CQRS专家、软件架构师、开发人员、领域专家、IT专家和业务经理。他们都会从自己的角度进行评论。

人物 角色描述
Gary是一位CQRS专家。他确保基于CQRS的解决方案可以为公司工作,并提供切实的好处。他是一个谨慎的人,理由很充分。

”定义CQRS模式很简单。实现CQRS模式所能带来的好处并不总是那么简单。“
Jana是一名软件架构师。她设计应用程序的总体结构。她的观点既切合实际又具有战略意义。换句话说,她不仅考虑现在需要什么技术方法,还考虑公司未来需要什么方向。Jana从事过使用DDD的项目。

“平衡公司、用户、It组织、开发人员和我们所依赖的技术平台的需求并不容易。”
Markus是一个软件开发人员,他是CQRS模式的新手。他善于分析,注重细节,做事有条不紊。他专注于手头的任务,即构建一个出色的应用程序。他知道他是最终对代码负责的人。

“我不关心您想为应用程序使用什么架构,我都能完成它”
Carlos是领域专家。他通晓会议管理的所有细节。他在许多帮助人们举办会议的组织中工作过。他还担任过许多不同的职务:销售、市场营销、会议管理和顾问。

“我想确保团队了解这项业务的运作方式,以便我们能够提供世界级的在线会议管理系统。”
Poe是一名专业IT人员,在云计算中部署和运行应用程序方面是专家。他对实际解决方案有着浓厚的兴趣,毕竟,他是那个在凌晨3点有问题的时候就会被呼叫的人。

“在云中运行复杂的应用程序所面临的挑战和管理本地应用程序所面临的挑战不同。我想确保我们新的会议管理系统符合我们发布的服务水平协议(service-level agreements, SLA)。”
Beth是一位业务经理。她帮助公司规划他们的业务将如何发展。她了解公司所处的市场,公司拥有的资源,以及公司的目标。她既有战略眼光,又对公司的日常运营感兴趣。

”公司在资源方面面临着许多相互矛盾的需求。我想确保我们的公司能平衡这些需求,并采取一项能让我们在中长期取得成功的商业计划。“

如果您对某一特定领域感兴趣,可以查看与您兴趣一致的专家提供的注释。

Contoso会议管理系统

本节将按照团队在旅程开始时的设定,介绍Contoso会议管理系统。该团队以前从未使用过CQRS模式,因此,我们在旅程结束时交付的系统可能并不完全符合这一描述,因为:

  • 我们边学边做的东西可能会影响我们最终的交付。
  • 这是一个学习的过程,很难估计我们能在可用的时间内完成什么。

系统概述

Contoso计划建立一个在线会议管理系统,使其客户能够计划和管理在物理位置举行的会议。该系统将使Contoso的客户能够:

  • 管理会议不同类型座位的销售。
  • 创建一个会议并定义该会议的特征。

Contoso会议管理系统将是一个多租户、云托管的应用程序。业务客户在创建和管理会议之前需要在系统中注册。

会议售座

业务客户定义会议可用的座位数量。业务客户还可以指定会议上的活动,如研讨会、招待会和高级会议,与会者必须有单独的票。业务客户还定义了这些活动可用的座位数量。

该系统管理座位的销售,以确保会议和子活动没有超额认购。该系统的这部分还将执行候补名单,以便如果其他与会者取消,他们的座位可以重新分配。

系统将要求与会者的姓名与购买的座位相关联,以便现场系统在与会者到达会议现场时为他们打印徽章。

创建会议

业务客户可以创建新的会议,并管理有关会议的信息,如会议名称、描述和日期。业务客户还可以通过发布会议,使会议在Contoso会议管理系统网站上可见,或者通过取消发布来隐藏会议。

此外,业务客户还可以为会议定义每种座位的类型和可用数量。

Contoso还计划可以使业务客户能够指定会议的以下特征:

  • 论文提交过程是否需要审阅。
  • 什么样的收费架构。
  • 关键人员是哪位,例如:项目主席,活动策划者

非功能性需求

Contoso对其会议管理系统有两个主要的非功能性需求:可扩展性和灵活性,它希望CQRS模式能够帮助它满足这两个需求。

可扩展性

会议管理系统将托管在云端。Contoso选择云平台的原因之一是它的可扩展性和弹性潜力。

尽管像Azure这样的云平台允许您通过添加(或删除)角色实例来扩展应用程序,但是您仍然必须将应用程序设计为可扩展的。对于许多应用程序来说,读操作的数量远远超过写操作的数量。通过将应用程序的读写操作划分为单独的对象,CQRS模式允许Contoso将这些操作划分为单独的Azure角色,这些角色可以彼此独立扩展。这意味着Contoso有机会更有效地扩展会议管理系统,并更好地利用它所使用的Azure角色实例。

灵活性

Contoso会议管理系统所处的市场竞争非常激烈,而且发展非常迅速。为了竞争,Contoso必须能够快速有效地使会议管理系统适应市场的变化。对灵活性的这一要求可分为若干相关方面:

  • 系统必须能够不断改进,以满足新的需求,并对市场的变化做出反应。

    Beth(业务经理)发言:

    Contoso计划通过快速响应市场变化和客户需求来竞争。Contoso必须能够快速而无痛地改进扩展这个系统。

  • 系统必须能够同时运行多个版本的软件,以支持正在使用来开会的客户,以及不希望立即升级到新版本的客户。其他客户可能希望在软件的新版本可用时将现有会议数据迁徙到新版本。

    Poe(IT运维)发言:

    这是一个巨大的挑战:在所有客户还在运行系统的过程中进行不停机升级。

  • Contoso希望这款软件至少能使用五年。它必须能够适应这段时期内的重大变化。

  • Contoso不希望系统某些部分的复杂性成为未来改变的障碍。

  • Contoso希望使用不同层次的开发人来开发系统的不同部分,简单的任务使用便宜的开发人员,更贵和更有经验的的开发人员用于开发系统的关键部分。

    Gary(CQRS专家)发言:

    在CQRS社区中有一些争论,关于在实践中,您是否可以为CQRS模式实现的不同部分使用不同的开发团队。

即将开始CQRS之旅

下一章是我们CQRS旅程的开始。它提供了关于Contoso会议管理系统的更多信息,并描述了系统的一些高级部分。随后的章节描述了Contoso实现会议管理系统的过程。

CQRS之旅——旅程1(我们的领域:Contoso会议管理系统)的更多相关文章

  1. CQRS之旅——旅程2(分解领域)

    旅程2:分解领域 设计停靠站点 "没有石头就没有拱门" --马可波罗 在本章中,我们将对Contoso会议管理系统进行一个高层次的概述.这将帮助您理解应用程序的结构.集成点以及应用 ...

  2. CQRS之旅——旅程3(订单和注册限界上下文)

    旅程3:订单和注册限界上下文 CQRS之旅的第一站 "寓言家和鳄鱼是一样的,只是名字不同" --约翰·劳森 描述: 订单和注册上下文有一部分职责在会议预订的过程中,在此上下文中,一 ...

  3. CQRS之旅——旅程5(准备发布V1版本)

    旅程5:准备发布V1版本 添加功能和重构,为V1版本发布做准备. "大多数人在完成一件事之后,就像留声机的唱片一样,一遍又一遍地使用它,直到它破碎,忘记了过去是用来创造更多未来的东西.&qu ...

  4. CQRS之旅——旅程4(扩展和增强订单和注册限界上下文)

    旅程4:扩展和增强订单和注册限界上下文 进一步探索订单和注册的有界上下文. "我明白,如果一个人想看些新鲜的东西,旅行并不是没有意义的."儒勒·凡尔纳,环游世界80天 对限界上下文 ...

  5. CQRS之旅——旅程7(增加弹性和优化性能)

    旅程7:增加弹性和优化性能 到达旅程的终点:最后的任务. "你不能飞的像一只长着鹪鹩翅膀的老鹰那样."亨利·哈德逊 我们旅程的最后阶段的三个主要目标是使系统对故障更具弹性,提高UI ...

  6. CQRS之旅——旅程8(后记:经验教训)

    旅程8:后记:经验教训 我们的地图有多好?我们走了多远?我们学到了什么?我们迷路了吗? "这片土地可能对那些愿意冒险的人有益."亨利.哈德逊 这一章总结了我们旅程中的发现.它强调了 ...

  7. CQRS之旅——旅程6(我们系统的版本管理)

    旅程6:我们系统的版本管理 准备下一站:升级和迁移 "变化是生活的调味品."威廉·考珀 此阶段的最高目标是了解如何升级包含实现CQRS模式和事件源的限界上下文的系统.团队在这一阶段 ...

  8. CQRS之旅——前言(翻译)

    探索CQRS和Event Sourcing 本项目聚焦在使用命令和查询分离模式和事件溯源(CQRS+Event Sourcing)构建一个具有高扩展,高可用和高维护性的应用程序. 本项目定位为一个学习 ...

  9. ES与CQRS之旅

    引言 领域驱动设计(Domain Driven Design),使用统一的建模语言.专注业务领域分析.采取化整为零并反复迭代的方式,以业务领域模型为圆心,向外辐射到系统轮廓的勾勒.具体模块的实现,为我 ...

随机推荐

  1. js右击事件

    先贴代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...

  2. AD9各种布线总结

    1.常规布线:不详细说了,是个人就知道怎么弄.需要说明的是在布线过程中,可按小键盘的*键或大键盘的数字2键添加一个过孔:按L键可以切换布线层:按数字3可设定最小线宽.典型线宽.最大线宽的值进行切换. ...

  3. ueditor1.4.3jsp版在上传图片报"未找到上传文件"解决方案

    这是因为struts2的过滤器,解决方法是自定义一个过滤器 新建一个过滤器的类,代码: package com.filter; import java.io.IOException; import j ...

  4. JSP相关背景

    -----------------siwuxie095                             Sun Microsystems             SUN 即 Stanford ...

  5. p2341&bzoj1051 受欢迎的牛

    传送门(洛谷) 传送门(bzoj) 题目 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C ...

  6. SQL Server修改主、外键和约束

    0.创建表 create table Users ( Id int, Name ), Phone ), Email ), Role_Id uniqueidentifier ) go create ta ...

  7. 第一章 –– Java基础语法

    第一章 –– Java基础语法 span::selection, .CodeMirror-line > span > span::selection { background: #d7d4 ...

  8. [WIP]laravel 入门

    创建: 2019/06/20 安装    composer brew install composer  laravel composer global require "laravel/i ...

  9. Yaf + Smarty 整合笔记

    Yaf真的是太简单了,简单到使用mvc的时候在view里面需要手写php脚本.因此考虑整合一下smarty模板引擎.随心所欲也正是yaf的魅力 Yaf 安装 这里简单说一下yaf的安装,已经是非常无脑 ...

  10. 大融合——LCT维护子树信息

    题目 [题目描述] 小强要在 $N$ 个孤立的星球上建立起一套通信系统.这套通信系统就是连接 $N$ 个点的一个树.这个树的边是一条一条添加上去的.在某个时刻,一条边的负载就是它所在的当前能够联通的树 ...