数据库无关紧要,以及其他即将无关紧要的事情






4.67/5 (2投票s)
我将尝试重点介绍数十年来数据库设计的趋势,以及我认为架构和设计风格将如何引领我们走向未来。
引言
本文是我对应用程序设计多年来如何演变的理解的摘要。在本次讨论中,我将尝试重点介绍数十年来设计趋势,以及我认为架构和设计风格将如何引领我们走向未来。“我无意贬低数据库设计者。”
我们是如何开始的...
我记得和一些以前编写代码的老师聊天,那时你需要自己制作存储系统。人们常说:“如果你能正确处理数据结构,那么其他事情都会迎刃而解。” 我们也曾为诸如排序和搜索等枯燥的任务争论各种算法,而这些现在已经司空见惯,因为编程语言已经为我们处理了。这里重要的点是,我们专注于信息如何作为主要关注点来表示,以及对其进行操作作为次要关注点。我们称之为第一代设计。
让我们快进到拥有现成数据库的时代(可能是关系型数据库或网络数据库——对于非常年轻的人来说,比如 Foxpro)。这时,我们可能养成了个很坏的习惯,一切都围绕着数据库进行设计,应用程序操作的数据结构都在数据库后面建模,并以某种方式连接到表示层。此时,由于操作上的问题,越来越多的逻辑开始构建在数据库周围,业务逻辑被写入存储过程,以便在一个数据库调用中完成最多的工作。焦点不在于数据如何在持久化存储中表示。我们称之为第二代设计。
我们现在在哪里...
让我们快进到面向对象的世界,拥有 Java 和 .NET 等语言(这些语言无法与原生代码的性能相媲美)。我们仍然保留了第二代设计的一些坏习惯。我们仍然专注于数据库驱动的设计,仍然在存储过程中编写大量代码(有时是因为旧系统要迁移到新栈,我们想保护投资)。关键是,我们身处一个面向对象的领域,拥有所谓的层式架构,但我们的设计却是由关系型数据库表驱动的。我曾与一些只关注数据库设计并以此为出发点的架构师合作过。从原则上讲,第一代和第二代设计是相同的,都是由数据表示机制驱动,而不是面向对象原则。
这种“数据优先”的理念导致了以下问题:
- 无数应用程序中的业务层只是对数据访问的一个薄包装,而业务逻辑则写在极难调试的存储过程中。
- 关系型数据库不支持继承或组合等各种面向对象原则的概念,这导致拥有非常扁平的数据传输对象(也称为值对象),原则上我们并没有进步到用对象进行思考。
- 我们在重复工作,花大量时间创建数据库,然后花同样多的精力创建值对象,并使其保持同步是一件痛苦的事情。
未来会是什么样子
在我看来,未来数据库将不再重要,我们无需显式设计数据库。它将仅仅存储我们的对象,换句话说,我相信世界将是一个面向对象的数据库,对象将被存储,而其存储机制则不被定义。
在我看来,未来的架构将大致如下:

任何业务的核心将由一个对象模型驱动。这将定义存在的业务实体,并且将相当静态。我们还将为这些实体添加基本的 CRUD 操作,但不同之处在于,数据存储(不是数据库)将只是另一个可以进行实体 CRUD 操作的库。无需设计任何特殊的东西。
在对象核心组件中,创建模式将蓬勃发展。该层的首要职责是能够表示业务对象,创建它们,并依赖于持久化存储。
行业很可能将这些对象模型标准化,就像 XML 结构在如此多的行业中已经被标准化一样。
在此层之上将是一个包装服务接口,其中将编写特定于给定业务的业务规则。这将是行为模式的领域,这样做是为了确保对象模型不会与业务逻辑紧密耦合。在这里,将根据业务需求对对象核心进行各种定制扩展。
这里将使用服务接口来公开用例。重要的是,服务接口对消费者来说只是另一个库。
UI、后台服务等组件将使用这些库。
为什么数据库不再重要会首先出现?
让我们看看行业趋势,我们最了解的东西最终会停止重要。三十年前,最大的辩论是“我应该使用哪种排序算法?” 今天的辩论是如何与其他系统集成,当然,我们已经提出了许多 XML 模式,但我们还没有在技术上成熟到找到最佳的集成方式。
数据库已经某种程度上演变成比数据存储更重要的东西。它们开始支配应用程序设计和开发(由于性能原因),作为行业,我们已经认识到这一点,并且需要停止开发耦合松散的应用程序。
数据库是应该不再重要的重复组件,而像面向对象数据库这样的步骤将确保它们不再重要。
还有什么将不再重要?
最终,其他事物也将不再重要。这些是:如何集成?可能是 REST 的变体,将业务实体公开为 CRUD,将是未来的方向。我支持 REST,因为我认为它只是另一个冗余元素,它的 CRUD 被暴露在另一个维度(不是数据库)上,而我们从将数据库变成一个框架中学到的知识将适用于这种变体的 REST。
信息技术包含三部分:
- 实体——这些将由行业定义,最终将标准化。
- CRUD——这是一项简单的技术,称之为 OODBMS 或 REST 或其他机制。我们所关注的只是数据的存储和检索。如果纸张不需要为行业而改变,为什么它对计算机很重要?
- 业务规则——这将是 IT 为人们定制这套规则的领域。
历史
- 2010 年 7 月 25 日:首次发布