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

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

查看所有标签

猜你喜欢:

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

自媒体写作,从基本功到实战方法

自媒体写作,从基本功到实战方法

余老诗 / 清华大学出版社 / 2018-9-1 / 59.00元

《自媒体写作》是一本系统而通俗易懂的自媒体写作指导书。 全书共分为10章,分别从写作基本功、新媒体认知、新媒体传播规律和自媒体作者阅读写作素养以及如何进阶等方面展开,结合简书、公众号、今日头条等主流自媒体所选例文,讲解写作知识和新媒体特点,内容详实,有理有据,非常适合自媒体写作爱好者自学。 尤其值得一提的是,写作基本功部分从原理、方法和技巧三个层面展开论说,让自媒体写作学习者既能从根本......一起来看看 《自媒体写作,从基本功到实战方法》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具