分布式系统中的解耦模式:领域查询 - 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] 
}

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

查看所有标签

猜你喜欢:

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

R语言实战(第2版)

R语言实战(第2版)

[美] Robert I. Kabacoff / 王小宁、刘撷芯、黄俊文等 / 人民邮电出版社 / 2016-5 / 99.00元

本书注重实用性,是一本全面而细致的R指南,高度概括了该软件和它的强大功能,展示了使用的统计示例,且对于难以用传统方法处理的凌乱、不完整和非正态的数据给出了优雅的处理方法。作者不仅仅探讨统计分析,还阐述了大量探索和展示数据的图形功能。新版做了大量更新和修正,新增了近200页内容,介绍数据挖掘、预测性分析和高级编程。一起来看看 《R语言实战(第2版)》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具

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

在线 XML 格式化压缩工具