领域模型是应用程序的核心,它包括了领域对象、状态、方法、事件、业务逻辑以及对象之间的关系。现在,我们来为Tiny Library CQRS创建一个领域模型项目。
-
在Solution Explorer下,右键单击TinyLibraryCQRS项目,单击Add
| New Project…菜单,这将打开Add New Project对话框
-
在Installed Templates选项卡下,选择Visual
C# | Windows,然后选择Class Library,确保所选的Framework版本是.NET
Framework 4,在Name文本框中,输入TinyLibrary.Domain,然后单击OK按钮
-
在Solution Explorer下,右键单击TinyLibrary.Domain项目的References节点,单击Add
Reference…菜单,这将打开Add Reference对话框
-
在.NET选项卡下,选择Apworks然后单击OK按钮
-
在TinyLibrary.Domain项目下,创建一个Book类,由于它是聚合根,因此使其继承于SourcedAggregateRoot类
1: using System;
2: using Apworks;
3: using Apworks.Snapshots;
4:
5: namespace TinyLibrary.Domain
6: {
7: public class Book : SourcedAggregateRoot
8: {
9: public string Title { get; private set; }
10: public string Publisher { get; private set; }
11: public DateTime PubDate { get; private set; }
12: public string ISBN { get; private set; }
13: public int Pages { get; private set; }
14: public bool Lent { get; private set; }
15:
16: public Book() : base() { }
17: public Book(long id) : base(id) { }
18:
19: protected override void DoBuildFromSnapshot(ISnapshot snapshot)
20: {
21: throw new NotImplementedException();
22: }
23:
24: protected override ISnapshot DoCreateSnapshot()
25: {
26: throw new NotImplementedException();
27: }
28: }
29: }
-
同理,在TinyLibrary.Domain项目下,创建一个Reader类
1: using System;
2: using System.Collections.Generic;
3: using Apworks;
4: using Apworks.Snapshots;
5:
6: namespace TinyLibrary.Domain
7: {
8: public class Reader : SourcedAggregateRoot
9: {
10: public string LoginName { get; private set; }
11: public string Name { get; private set; }
12: public List<Book> Books { get; private set; }
13:
14: public Reader() : base() { Books = new List<Book>(); }
15:
16: public Reader(long id) : base(id) { Books = new List<Book>(); }
17:
18: protected override void DoBuildFromSnapshot(ISnapshot snapshot)
19: {
20: throw new NotImplementedException();
21: }
22:
23: protected override ISnapshot DoCreateSnapshot()
24: {
25: throw new NotImplementedException();
26: }
27: }
28: }
从上面两段代码可以看出,有两个protected的方法我们还没有实现,这两个方法是定义在SourcedAggregateRoot基类中的,用来提供与“快照”相关的功能。“快照”是CQRS架构中非常重要的一部分,在下一章节中,我们将了解到,如何为我们的领域模型添加快照功能。
分享到:
相关推荐
在Apworks框架发布Alpha版本的时候,我已经针对其开发案例:TinyLibraryCQRS写了Walkthrough文档,地址是:...Apworks是一套应用程序开发框架,软件架构师和开发人员可以使用这套开发框架开发出面向领域(Domain-Centri
magic-bottle项目是一套匿名社交系统,包括Andriod、WEB管理端以及服务端,采用DDD+CQRS架构 magic-bottle项目是一套匿名社交系统,包括Andriod、WEB管理端以及服务端,采用DDD+CQRS架构 magic-bottle项目是一套...
让领域驱动设计变得触手可得 - 基于 DDD、EventSourcing 的现代响应式 CQRS 架构微服务开发框架。
一个教科书式的基于C#的CQRS架构,对了解领域驱动设计和命令职责分离原则的思想有很大的帮助。
FoxOffice - 此示例程序展示了如何基于CQRS和事件源构建分布式云.NET Core程序
commanded, 使用命令建立 Elixir cqrs/es应用程序 命令使用命令在 cqrs/es Pattern 之后构建你自己的tcm应用程序。提供支持:命令注册和调度。托管和委托聚合。事件处理。长时间运行的流程管理器。命令为你的构建...
我们正在创造一个参考指南/电子书名为“构建和开发集装箱和微服务基于.NET应用程序”,其详细阐述了如何开发这种建筑风格(微服务,多克尔容器,领域驱动设计某些微服务)以及其他更简单的架构风格,如可以作为...
如何实现CQRS架构
为了运行这个应用程序,你需要在你的开发环境中安装 java8 SDK、docker、docker-compose 和 docker-machine。 如何设置开发环境: - 在多个环境中安装 Java 8 SDK 的指南。 - 在多个环境中安装 docker 的指南。 - 在...
event-sourcing, Meteor的CQRS和事件采购基础架构 用于 Meteor的 CQRS &事件源 这个包提供了构建你的Meteor 应用程序的基础设施,以英镑 ( 命令/查询职责分离) 和英镑事件采购原则为基础。 这样可以使用强大的业务...
CQRS(Command Query Responsibility Segration)架构,大家应该不会陌生了。简单的说,就是一个系统,从架构上把它拆分为两部分:命令处理(写请求)+查询处理(读请求)。然后读写两边可以用不同的架构实现,以...
应用程序 模拟最终用户添加收入或费用交易的银行帐户方案,并在异步事件源和CQRS架构中对其进行处理以重新计算用户的银行帐户余额。 用户还可以请求其帐户余额。 在这里,您可以看到设计: 部署外部服务 docker-...
本项目是展示如何使用ENode开发基于DDD,CQRS,ES架构的应用程序。 共分为三个Bounded Context: 1.ConferenceManagement,负责会议位置后台管理 2.Registration,负责处理用户下单 3.Payments,负责处理支付 运行步骤...
1.0.0版的目标帮助使用编写CQRS和事件源应用程序状态它仍处于非常早期的开发阶段。不要使用版本0.0.5,master分支与此完全不同。建筑要求Java 8 Maven(经过3.5.0+测试) Docker compose(已通过1.18.0测试)适用于...
收集来自主流的DDD开发理论知识培训课程,包括: 领域驱动设计简介 领域通用语言 领域驱动设计的构造块 领域驱动设计编程实践 CQRS架构 模型驱动开发
具有CQRS架构的Todolist应用程序。 用建设。 演示版 请访问。 管理面板和待办事项历史记录快照 markov链摘要 安装 克隆此模块,然后将服务器指向/ public。 运行composer install来下载依赖项。 要生成数据库,...
如果一定要说微服务和CQRS架构的关系,那我觉得微服务是一种边界思维,微服务的目的是为了从业务角度拆分(职责分离)当前业务领域的不同业务模块到不同的服务,每个微服务之间的数据完全独立,它们之间的交互可以...
8.2.4对应用程序实施不同的划分192 8.2.5以不同方式组织项目团队192 8.2.6对领域和有界上下文的CQRS适用性进行评估192 8.2.7为性能进行规划192 8.2.8重新考虑用户界面193 8.2.9探索事件源的其他用处193 8.2.10探索有...