为什么要数据解耦,是为了拓展出更多的部署场景。

数据层解耦是指应用程序在数据读取方面不指定介质,而是通过协议或是接口的方式进行数据调用。

QA的样子

Q: 为什么要这么设计呢?
A: 数据层解耦的目的是方便开发者做数据拓展和方便使用者部署与迁移。最常见的就是在你的机器上已经有了A数据库,但是当你需要B服务时,它却只支持C数据库。这就很麻烦了,要不然就去改代码(说得好,所以我选择番茄味的),要不就是妥协装上C数据库,那这样你就拥有了两个数据库了(好耶)。

Q: 为什么不这样设计呢?
A: 很多时候由于开发时间的限制或是老项目代码的问题,导致无法对数据层进行接口化。这里我就像吐槽一下了,明明有些项目是有时间做数据层抽象的,但是作者就是不做(可恶)。

Q: 支持多个数据库是数据层解耦吗?
A: 通常情况下,对数据层解耦表示的是代码层面的逻辑,支持多个数据库和解耦关系不大。解耦更关注隔离性,通过协议或是接口来规范数据使用方与存储提供方的交互规则。多数据库支持并不代表设计上解耦。

解耦的优势

解耦的好处有很多,不仅是对于使用者来说,对于开发者来说也是。方便开发者迁移或升级数据库、存储测试、开发环境隔离等。

支持更多场景

有些项目其实是小型甚至微型项目,大多数时候使用数据库造成的性能开支比项目本身还高,但是项目本身又需要支持大数据量的需求场景。在数据层解耦后,开发者或使用者能方便对项目应用场景进行伸缩。

  • 以文件方式实现协议方便数据切换
  • 以数据库方式实现协议方便管理数据
  • 以内存方式实现协议方便无痕使用

每种场景都有契合的实现方式,解耦的其中一个好处就是能让你的项目在更多场景下运行。

快速启动

我算是一个懒人,有时候找一个功能就会找到了一堆项目,那么我就要根据自己的需求进行筛选。但是有些项目运行之麻烦,不仅需要配置文件更改环境,还需要指定的数据库版本。这就导致我想要运行一个demo都要配置半天。这种项目一般就会作为我的次要选择,只有在没得选的时候才会考虑。当然,我有这样的想法不只是因为启动问题,而是因为迁移和备份问题。我需要的可能只是一个小服务,但是运维和备份成本过高了。

提供一个sqlite3的环境或是使用内存缓存能很方便地为使用者提供demo或是快速启动。

服务拓展设计

很常见的一种方式就是集成服务,正好我这边指定了使用A数据库,那么我肯定会优先选择支持A数据库的服务。然后你作为服务提供方,那你肯定会想要让自己的服务支持A数据库。那么下一个用户需要B数据库呢?再下一个需要C数据库呢?不做解耦只能让自己的服务越来越庞大,越来越难以维护(当然,你也可以表示只想支持A数据库,这是自由)。

解耦就是面向未来的拓展设计,谁知道未来会有什么样的数据存储介质呢?

综述

数据层解耦分为两个部分,一个是开发部分,一个是使用体验。开发部分是最重要的,如何解耦本来就是一项开发课程,过度解耦会让拓展变得复杂,浅层解耦会让功能拓展受限,如何找到平衡是需要不断的开发积累。


本站总访问量