ThinkNet终于见面了
经过一段时间的DDD学习,第一个开源框架终于初步完成了,我为他命名为ThinkNet。之前或许你听过ThinkPHP,没错,虽然我对php没有过多的掌握,但是借助thinkphp,我也能开发一个web应用程序。所以我也想写一个框架能够帮助快速开发基于DDD考虑的应用程序。
首先要感谢园子里的dax.net和netfocus的文章对于我入门DDD提供了很大的帮助,同时他们也都有实现各自风格的框架,如果你阅读过我的源码也许能从他们的框架中找到一点影子,可以说没有他们的源码分享,我也很难从无到有写出ThinkNet。再次对他们的无私奉献表示感谢。
ThinkNet支持CQRS+ES(可选)或者经典DDD两种不同的风格,可以说尽量做到两种都兼容或者混搭(部分业务采用CRQS,部分采用经典的方式),毕竟一个项目完全采用CQRS+ES未免有点过于强求,经典DDD从设计上来说相对比较简单。
在这里再次贴出CQRS较为完整的架构图

一般的项目也不会采用分布式,所以可以忽略上图WCF部分。图例其他部分你都能在ThinkNet一一对应。大致的流程就是一个Command发送到CommandBus中,CommandBus会执行该Command相应的CommandHandler,CommandHandler的一般实现为创建聚合实例或者修改聚合状态,然后保存到Repository中,Repository会先将聚合产生的Event集合持久化(EventStore),持久化成功后会将事件发布到EventBus中,EventBus会执行该事件相应的EventHandler(其中包括同步到Q端数据的Handler),至此,C端的流程就结束了。Q端的业务就相对简单多了,就是一些查询接口设计和实现。
以上Command和CommandHandler及Event和EventHandler的实现主要是用的订阅/发布。框架具体是如何实现的将在后续的文章中作阐述。
说完了CQRS架构,再说一下经典DDD的架构是什么样的。还是先上图
![]()
相比CQRS,经典 DDD的架构要简单多了,创建或者修改一个聚合一般的做法是用一个DTO发送到应用层,在应用层创建或重建聚合,然后添加或更新到对应的Repository中,最后由应用层提交事务。
第一篇文章就打算这么多了。此文基本上做了一些简单的介绍,以后的博文我并不会对DDD理论做过多的阐述,因为本人对于DDD的掌握还不足以授于他人,况且园子里也有不少文章了。我将重点放在具体应用上,我也是一个码农,解决问题是我们这些码农的日常工作,所以我尽量对想即将使用DDD或者想了解DDD的人提供一些信息。
ThinkNet终于见面了的更多相关文章
- 开始DDD
如何开始DDD(完) 连续写了两篇文章,这一篇我想是序的完结篇了.结合用户注册的例子再将他简单丰富一下.在这里只添加一个简单需求,就是用户注册成功后给用户发一封邮件.补充一下之前的代码 public ...
- Knockout学习之控制流绑定器
控制流绑定器 “foreach”绑定 顾名思义,通过该绑定我们就可以将监控数组循环输出到页面中去了,当然我们还是先来段简单的示例,仅仅只是输出监控数组: <ul data-bind=" ...
- 2021 CSP-J复赛 我的备战与游记
目录 备战 2021.10.18 2021.10.19 2021.10.20 2021.10.21 2021.10.22 比赛当日 早上 线下见面 正文 比赛后 赛后总结与讲解 简单总结 Candy ...
- Power BI Q&A终于在圣诞前夕盼到
相信跟所有的数据分析师们一样,赶上年底和年初都是非常忙的时候,即使赶上哪天运气好不加班每天回到家吃完饭恨不得倒在床上就美美的睡上一觉.本人也是如此,正直疲惫之际,尹相志在微博上把我一圈,说Power ...
- 我的新书《C++服务器开发精髓》终于出版啦
一.千呼万唤始出来 亲爱的各位读者,我的新书<C++ 服务器开发精髓>终于终于终于与大家见面了,图书如下: 图书的封面设计很精美,当然内容一定不负众望.因出版社老师要求提供一张照片放到封面 ...
- 终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了
前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...
- MySQL常见面试题
1. 主键 超键 候选键 外键 主 键: 数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合.一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null). 超 键: 在关系中 ...
- eclipse启动优化,终于不那么卡了!
eclipse启动优化,终于不那么卡了! 网上找了好多都是myEclipse的优化的,跟eclipse有点区别,找了很多方法还是不能让这个eclipse(Version: Kepler Release ...
- C#终于支持可选参数了!
今天偶然看了一下C#4.0的新特性, 第一个新特性就令我兴奋不已, 曾经一度令我使用C#很不习惯的"死参数"问题终于搞定了.实在太爽了! 过去用C++, VB.NET的时候都很爽, ...
随机推荐
- POJ-2387.Til the Cows Come Home.(五种方法:Dijkstra + Dijkstra堆优化 + Bellman-Ford + SPFA + Floyd-Warshall)
昨天刚学习完最短路的算法,今天开始练题发现我是真的菜呀,居然能忘记邻接表是怎么写的,真的是菜的真实...... 为了弥补自己的菜,我决定这道题我就要用五种办法写出,并在Dijkstra算法堆优化中另外 ...
- Map 数据结构
JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键.这给它的使用带来了很大的限制. 为了解决这个问题,ES6 提供了 Map 数据结构. ...
- nc6 用业务插件注册来跑按钮事件
在实际开发中,有些需求是要求系统单据,编辑或者触发其他按钮来回写其他模块单据 这时候就能用业务插件方式来触发其他模块的按钮事件,而不用去模块找对应的按钮编辑事件类 package hz.bs.hzct ...
- OSI网络七层协议+火了火了火
因为部门新进了一台价值百万的网络测试设备,所以有太大的必要了解有关网络相关的基础知识了. 网络七层协议OSI(open system interconnection)从上到下依次为:应用层.表示层.会 ...
- Linux 只列出目录的方法
1. ls -d 2. find -type d -maxdepth 1 3. ls -F | grep "/$" 4. ls -l | grep "^d"
- downLoad
String root= ServletActionContext.getServletContext().getRealPath(File.separator).replace("\\&q ...
- 别人的Linux私房菜(11)认识与学习BASH
Linux下使用BASH Bourne Again Shell 另外一种由用于Unix的伯克利大学的Bill Joy设计的C Shell 系统中合法的shell会写入到/etc/sh ...
- SAS DATA步读取数据
上面一节讲了SAS的基本概念,以及语法结构,这次主要讲解SAS DATA步读取数据. 1 ·列表输入 2 ·按列输入 3 ·格式化输入 使用DATA步读取数据的基本形式如下: DA ...
- centos7 安装搜狗输入法
1.root权限,卸载 ibus : yum remove ibus 2.加入EPEL源 sudo yum install epel-release 3.添加mosquito-myrepo源 su ...
- diff 命令详解
[自注:] 1,还有个colordiff命令,用颜色标识不同的地方.需要先安装 2,diff normal模式中 2,5表示从第二行到第五行 3,diff -c 模式中,2,5表示从第二行到第五行 4 ...