`
zlzyfpqianhao9951078
  • 浏览: 13603 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

CQRS:CQRS+AJAX架构 之 查询(Q)模型设计

 
阅读更多

背景

准备采用CQRS架构,之前也简单的应用过(只是把读和写在程序级别进行了分离),这篇文章是我最近几天的思考,写下来希望大家多提意见。这篇文章不会涉及Command端的设计,重点关注如何设计查询

真心的希望大家看完后能给出你们的意见和想法。

什么是CQRS

CQRS:Command Query Responsibility Separation。我喜欢职责分离,这也是我采用这种架构的原因,确实能带来单一职责的优点。

简单的CQRS

 

复杂的CQRS

 

CQRS的常见查询需求

下面是系统的一些查询需求:

查询面板

 

高级查询

 

数据行级别的权限

如:个人、部门、分公司、品种。

固定约束

如:启用、合法、租户ID。

需求总结

 

CQRS的查询设计

充分利用SQL和动态类型的优势,不做太多无谓的封装。

关键决策:

    1. 直接查询数据库返回Dynamic类型,不需要定义强类型。
    2. 直接用SQL,支持动态查询面板和动态数据行权限。目前没有找到封装SQL的理由,最多是在外围再封装一层,但是不会隐藏SQL(我之前写过一个简单的查询对象)。
    3. 利用一些策略防止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…………………………………………………………………………

转载:http://www.verydemo.com/demo_c107_i12316.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics