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

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

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

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

查看所有标签

猜你喜欢:

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

程序员的算法趣题

程序员的算法趣题

[ 日] 增井敏克 / 绝 云 / 人民邮电出版社 / 2017-7 / 55.00元

本书是一本解谜式的趣味算法书,从实际应用出发,通过趣味谜题的解谜过程,引导读者在愉悦中提升思维能力、掌握算法精髓。此外,本书作者在谜题解答上,通过算法的关键原理讲解,从思维细节入手,发掘启发性算法新解,并辅以Ruby、JavaScript等不同语言编写的源代码示例,使读者在算法思维与编程实践的分合之间,切实提高编程能力。 本书适合已经学习过排序、搜索等知名算法,并想要学习更多有趣算法以提升编程技巧......一起来看看 《程序员的算法趣题》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具