推荐序
分离是为了更好的相聚
2013年,我在开源中国网站上认识了本书作者刘增辉,并和他多次探讨过关于Java开源框架的种种技术问题。那段时间,我正在开源一款名为Smart Framework的轻量级Java Web 框架,当时我不敢奢望自己开源的框架会有多少人认可,但没想到后来还真有不少朋友们为此框架提出了宝贵建议并做出了巨大贡献。尤其是在数据持久层这块,增辉给了我许多支持与帮助,让我感受到开源带给我的不仅是技术能力上的提升,更多的是让自己感到快乐。
我了解到增辉对MyBatis的研究颇为深入,不仅对MyBatis的内核,甚至对于其扩展都能做到了然于心、游刃有余。他曾经也开源了许多MyBatis核心组件,帮助许多开发者提高了工作效率,而我正是这众多开发者中的一位。
我不想占用这篇推荐序的宝贵篇幅为大家讲解如何来使用 MyBatis,因为这本书中对MyBatis 的介绍远比我讲的更加详细和深入。现在我只想和大家聊聊架构设计中的一个核心问题:关注点分离。因为这个问题同样也是MyBatis框架需要解决的核心问题。
关注点分离
关注点分离所对应的英文是Separation of Concerns,简称SOC。它是最经典的架构设计原则之一,在许多架构设计中被广泛使用。关注点分离原则为我们的架构设计提出了三点要求。
1.架构中需要变化的部分,一定要能够非常清晰地被识别出来。
2.若架构中某部分发生变化,则该变化不会影响到其他部分。
3.若架构中某部分需要扩展,则该扩展也不会影响到其他部分。
架构能做到关注点分离,才能做到真正意义上的解耦,这是架构师们需要努力实现的目标。如果大家要问,关注点分离做得最有效的落地实践是什么?我们首先能想到的就是“前后端分离”。
前后端分离
曾经我们开发Web应用程序时,对前端和后端的概念不太清晰,开发者们逐渐认为前端和后端有必要进行分离了,前端需要考虑界面展现与数据展现问题,后端需要考虑业务逻辑与数据逻辑问题。可见,前端和后端所关注的问题是完全不同的,应该在架构上将它们进行分离。此外,在团队协作上也能将前端与后端这两部分的工作进行分离,因此出现了前端工程师与后端工程师这两个不同岗位。这样分工绝不是偶然的,它不仅让架构变得更加解耦,还能显著地提升团队的开发效率。
针对前端工程师而言,需要将界面展现与数据展现相分离;针对后端工程师而言,不仅要清晰地理解业务逻辑,善于将数据进行合理的建模,最终还要做到将业务逻辑与数据逻辑相分离。
业务逻辑与数据逻辑相分离
业务逻辑对于我们而言已经很清楚了,但数据逻辑包括哪些呢?最直接的就是一个个对应于数据库中每张数据表的实体对象,它有一个很好听的名字:数据访问对象,即 Data Access Object,简称DAO。很明显,这一层数据直接和底层数据库打交道,我们将它们从业务逻辑中分离出来,并加以封装。也就是说,没必要为每一个 DAO 对象初始化的过程去编写大量的代码,这些代码应该封装到一个框架中。我们只需要编写相应的 SQL 语句,并将这些 SQL 语句从业务代码中分离出来,最终将执行SQL语句所得到的结果集映射到DAO对象中即可。
不知道大家对我刚刚提到的“关注点分离”有怎样的理解。无论大家理解或深或浅,毫无疑问,这个问题都已成为架构中最核心的部分。
MyBatis就是这样的框架——它能帮助我们将业务逻辑与数据逻辑相分离,让开发应用程序的过程变得更加高效。究竟MyBatis中隐藏着怎样的奥秘?不要急,这本书将为大家揭晓答案。
作者增辉停下开发的脚步,通过深思熟虑和细心总结,把动态的实践静止到了纸张上,为各位读者悉心解读 MyBatis 的方方面面。相信他创作这本书的过程亦如当初刻苦自学 MyBatis并在各大社区开源自己编写的核心组件的过程,倾注了全部的热情和心血。不忘初心,方得始终,希望各位读者能够喜欢这本书,并从中有所收获。
《架构探险》作者、特赞科技CTO,黄勇
2017年5月