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

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

内容简介:使用领域查询替换普通自由查询可以将业务知识从服务器内部分离出来。查询通常与数据库查询相关联。然而,我们可以通过其他方式查询不是数据库的系统,比如查询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] 
}

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

查看所有标签

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

Python网络数据采集

Python网络数据采集

米切尔 (Ryan Mitchell) / 陶俊杰、陈小莉 / 人民邮电出版社 / 2016-3-1 / CNY 59.00

本书采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导。第一部分重点介绍网络数据采集的基本原理:如何用Python从网络服务器请求信息,如何对服务器的响应进行基本处理,以及如何以自动化手段与网站进行交互。第二部分介绍如何用网络爬虫测试网站,自动化处理,以及如何通过更多的方式接入网络。一起来看看 《Python网络数据采集》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

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

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具