分布式系统中的解耦模式:领域查询 - mathiasverraes

栏目: 数据库 · 发布时间: 5年前

内容简介:使用领域查询替换普通自由查询可以将业务知识从服务器内部分离出来。查询通常与数据库查询相关联。然而,我们可以通过其他方式查询不是数据库的系统,比如查询REST和GraphQL等API。自由查询这个术语是指使用丰富的查询语言,可以非常自由地访问和组合来自这些系统的数据。

使用领域查询替换普通自由查询可以将业务知识从服务器内部分离出来。

问题

查询通常与数据库查询相关联。然而,我们可以通过其他方式查询不是数据库的系统,比如查询REST和GraphQL等API。自由查询这个术语是指使用丰富的查询语言,可以非常自由地访问和组合来自这些系统的数据。

在由单个团队拥有的单个客户端和服务器的非常简单的环境中,这不是一个大问题,因为可以同时针对服务器和客户端进行修改。

但是在更复杂的环境中,几个客户端却并不在服务器团队的控制之下,比如一个公共API。我们不知道他们将向我们发送什么查询,因此保证API向后兼容性的唯一方法是保持模式不变。当然,我们可以记录查询,但这并不能保证在客户端中隐藏有尚未发送的查询。

比如客户端发送以下自由查询:

SELECT *
FROM Cars AS c
INNER JOIN LeasingContracts AS lc ON c.CarId = lc.CarId
WHERE c.RegistrationYear = 2014;

仅从 SQL 查询中无法搞清楚其目的是什么?据推测,客户端并非使用这两个表中的所有字段,如果为这个客户端专门建立一个数据表结构,提供其所需的字段,这样可能会有表结构的破坏性风险。

解决

经过进一步调查得知客户其实想要知道哪些车辆需要更换?并使用一些LeasingContracts字段来计算状态。

因此,针对这种情况,更好的设计是关闭对数据库字段的所有访问,并使用自然语言提供领域查询。 服务器获取并计算结果,响应消息仅包含客户端实际需要的数据。

WhichCarsAreUpForReplacement : Query {
  registrationYear: 2014
}

CarsThatAreUpForReplacement : Response {
   cars: [CarId] 
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

降维攻击

降维攻击

高德 / 世界图书出版公司 / 2016-3-31 / 39.80元

本书优势: 第一,降维攻击是一个刚开始流行的商业概念,未来随着电影《三体》的上映,这个概念会更加流行,会成为一个全社会的讨论热点。推出这本书,正好借势营销,是一个热点窗口,同时这个概念的商业价值,又符合了时下市场的需求。 第二,这本书的案例和分析,立足于本土,因为降维攻击的思维,很好地表现了国内许多互联网企业崛起的过程,百度,阿里、腾讯、京东等电商的崛起历程都充满了降维的智慧,对于目前......一起来看看 《降维攻击》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换