背景
准备采用CQRS架构,之前也简单的应用过(只是把读和写在程序级别进行了分离),这篇文章是我最近几天的思考,写下来希望大家多提意见。这篇文章不会涉及Command端的设计,重点关注如何设计查询。
真心的希望大家看完后能给出你们的意见和想法。
什么是CQRS
CQRS:Command Query Responsibility Separation。我喜欢职责分离,这也是我采用这种架构的原因,确实能带来单一职责的优点。
简单的CQRS
复杂的CQRS
CQRS的常见查询需求
下面是系统的一些查询需求:
查询面板
高级查询
数据行级别的权限
如:个人、部门、分公司、品种。
固定约束
如:启用、合法、租户ID。
需求总结
CQRS的查询设计
充分利用SQL和动态类型的优势,不做太多无谓的封装。
关键决策:
- 直接查询数据库返回Dynamic类型,不需要定义强类型。
- 直接用SQL,支持动态查询面板和动态数据行权限。目前没有找到封装SQL的理由,最多是在外围再封装一层,但是不会隐藏SQL(我之前写过一个简单的查询对象)。
- 利用一些策略防止SQL注入和权限提升(这篇文章不介绍)。
示例代码
下载地址:http://happy.codeplex.com/SourceControl/latest。
AJAX程序
Ext.onReady( query = TableOrViewName: 'Users' WhereClause: "Name NOT LIKE '%段%'" url: 'TestDynamicQuery/Fetch' method: 'POST' success: query = TableOrViewName: 'Users' WhereClause: "Age >= 20 AND Age <= 27" url: 'Tes…………………………………………………………………………
相关推荐
JdonFramework应用案例之一: JdonFrameworkTest CQRS+ES
magic-bottle项目是一套匿名社交系统,包括Andriod、WEB管理端以及服务端,采用DDD+CQRS架构 magic-bottle项目是一套匿名社交系统,包括Andriod、WEB管理端以及服务端,采用DDD+CQRS架构 magic-bottle项目是一套...
CQRS +事件源+ DDD 此应用程序是一个测试,一个研究案例。 它基于Gregory Young CQRS Simple( )。 这是什么? 这是一个基于express.js的API,旨在将生成的事件存储在本地内存事件存储中。 也就是说,重新启动...
什么是Xer.Cqrs? Xer.Cqrs是一个便捷程序包,其中包含构建具有DDD概念的CQRS写面所需的所有程序包。 它将其他轻量级XerProjects库分组在一起: -包含域驱动设计(DDD)组件/概念。 -包含用于处理命令的组件。 -...
CQRS:通用命令CQRS [命令和查询责任隔离]
使用CQRS +事件源的微服务样板 这是一个非常简单的示例应用程序,具有两个端点,在该应用程序中,将模拟创建具有name属性的项目以及所有已注册项目的列表。 内置: 码头工人 PHP 7.3 Zend表现力 口才ORM ...
CQRS(Command Query Responsibility Segration)架构,大家应该不会陌生了。简单的说,就是一个系统,从架构上把它拆分为两部分:命令处理(写请求)+查询处理(读请求)。然后读写两边可以用不同的架构实现,以...
awesome-elixir-cqrs:精选的Elixir和命令查询责任隔离(CQRS)资源的精选列表
ThaGet.Cqrs:CQR模板的项目结构
Haskell的CQRS介绍这是CQRS + ES架构模式的Haskell实现。 它结合了两种模式,每种模式本身都具有强大的功能,但是它们的组合却成倍地强大。 第一种模式是命令查询责任隔离(CQRS),它用于将应用程序中进行写或更新...
event-sourcing, Meteor的CQRS和事件采购基础架构 用于 Meteor的 CQRS &事件源 这个包提供了构建你的Meteor 应用程序的基础设施,以英镑 ( 命令/查询职责分离) 和英镑事件采购原则为基础。 这样可以使用强大的业务...
它的灵感来自Lokad.CQRS,但并不局限于特定的存储实现或基础架构。 它支持ES6类和依赖项注入,因此可以修改或替换您自己的实现中的任何组件,而不会破坏软件包的代码库。 您的应用程序应使用与以下界面匹配的宽松...
将Edument的[EDUM]命令查询责任分离(CQRS)套件转换为Go。 有关CQRS设计的更多信息,请参见CQRS designcom / mbucc / cqrs / wiki上的 。 有关其他Go CQRS库,请参见 [EDUM] Edument AB(2013年4月30日)。 用于...
CQRS 轻量级的Java CQRS框架。
我们将通过在一个简单的CQRS应用程序中将命令和查询分开来做到这一点。 每个模块代表引入此模式的不同方式。 而且,每个模块都是独立的应用程序。先决条件您需要什么来运行该软件: Java 8+总览示例应用程序基于...
的参考架构,旨在说明以下 Akka.NET 技术和原理: - 使用写入事件的 Akka.NET 参与者使用与使用读取事件的参与者截然不同的接口 - 一个模块,允许 Akka.NET 开发人员创建 Akka.NET 参与者的水平可扩展、对等、容错和...
CQRS CQRS研讨会
CQRS 旅程CQRS 旅程CQRS 旅程CQRS 旅程CQRS 旅程CQRS 旅程
具有CQRS架构的Todolist应用程序。 用建设。 演示版 请访问。 管理面板和待办事项历史记录快照 markov链摘要 安装 克隆此模块,然后将服务器指向/ public。 运行composer install来下载依赖项。 要生成数据库,...
CQRS和DDD架构模式抽象的这项工作提出了CQRS(命令和查询责任隔离)和DDD(域驱动设计)体系结构模式的实际应用,其中包括: 领域模型和有界上下文定义技术代码和业务逻辑之间的清晰分离指令端休息API 查询侧边api ...