美文网首页全栈工程师修炼指南
唯有套路得人心:谈谈Java EE的那些模式

唯有套路得人心:谈谈Java EE的那些模式

作者: 码农架构 | 来源:发表于2020-11-13 10:55 被阅读0次

背景和概念

我相信很多人都接触过面向对象模式,可是,模式是个通用词,面向对象只是其中的一个分支而已。事实上,我们本章的重点 MVC 本身就是一种典型的模式,介绍过的 CQRS 是模式,学习过的 AOP、IoC,这些其实也都是模式。

世界上没有任何一门语言,像 Java 一样,几乎一直被黑,但是生态圈一直在壮大,且在工业界具备如此统治力。很多人说,Java 是一门平庸的语言,这可能没错,但是它对于底层细节的封装和语言本身的难度做到了很好的平衡,它不一定会有多精巧、多出彩,但是新手也可以顺利完成工作,且不容易写出破坏性强、其他人难以接手的代码,这对于要规模、要量产的工业界来说,简直是超级福音。

使用 Java 的人可以快速上手,也可以把精力专注在高层的架构和设计上面,这就是为什么使用 Java 的人往往对模式特别敏感的原因。

概览

Java EE 的模式涉及的面非常广泛,下图是来自经典的 Core J2EE Patterns: Best Practices and Design Strategies 一书,对我们从宏观上理解 Java EE 模式有一定的指导意义。但是请不要以为这就是一个完整的 Java EE 的模式列表,它只是列出了在当时比较常见的那一些而已。

image.png

从图中我们可以看到,这些“核心模式”大致分为呈现层(Presentation Tier,绿色部分)、业务层(Business Tier,紫色部分)和集成层(Integration Tier,红色部分)三大部分,模式之间有的通过实线箭头连接,表示着不同模式之间的单向关联关系,有的通过虚线箭头连接,表示着模式之间“使用包含”的依赖关系。

这里面的内容其实有很多在本章已经涉及到了,比如 Front Controller 和 Business Object,但是,我还想补充和细化其中的两个模式,它们在网站开发的项目中非常常用:Intercepting Filter 和 Data Access Object。

拦截过滤器

拦截过滤器(Intercepting Filter)正如图中的“Apply zero or more”和 Servlet 规范所述一样,应当具备一个链式结构。这个链式结构中的每个过滤器,互相之间应当是一个互不依赖的松耦合关系,以便于组合容易。这个过滤器链条,出现的位置通常在控制器 Front Controller 之前,在还没有进行到 Servlet 的 URL 映射前,请求需要先通过它的过滤逻辑。

数据访问对象

DAO(Data Access Object)本质上是能够为某种特定数据持久化的机制提供抽象结构的对象。虽然我们谈论 DAO 基本上是默认这里的数据持久化的介质就是数据库,但需要明确的是,实际上并没有这样的约束。换句话说,DAO 可以把数据持久化到数据库中,但也可以持久化到文件里,甚至会以网络请求的方式把数据持久化到某个远程服务中去。

但事物都有两面性,DAO 也不是完美的,比如说,多加一层就会从额外的抽象层次上带来软件的复杂性,它经常和“抽象泄露(Leaky Abstraction)”这样的现象联系起来。

这里是说,理想状况下,程序员只需要关心“某一抽象层之上”的逻辑和调用,这也是我们分层的一大好处。可是,现实总是和理想有距离的,一旦抽象之下的部分出错,程序员很可能必须去了解和深入这部分的内容,这就违背了抽象分层的初衷,但是在很多情况下这是不可避免的,这也是整个软件体系日渐复杂,我们需要学习的内容越来越多的原因之一。

扩展阅读

  • 文中提到了 Java EE 平台的一系列标准和技术,维基百科上有一个简单的列表供参考。
  • Core J2EE Patterns: Best Practices and Design Strategies 这本书对于你学习 Java EE 的模式会提供不错的指导性帮助,属于权威之一,但是内容比较抽象,如果你在设计方面有一定追求,它是很好的阅读材料。好几年前我曾经读过纸质的第一版,但这是第二版,已经可以在网上公开阅读。
  • 如果对于文中提到的 Struts 拦截器感兴趣,请看 Struts 官方文档中对于拦截器的介绍
  • 文中提到了抽象泄露的概念,如果你感兴趣的话,请阅读 The Law of Leaky Abstractions,作者 Joel Spolsky 就是那本著名的《软件随想录》的作者。
  • MyBatis 的官网,是的,MyBatis 的教程我就推荐官网上的,清晰简洁,而且具备中文版,不需要去找什么第三方的资料了;如果是需要中文的 Hibernate 入门资料,我推荐 W3Cschool 上的 Hibernate 教程
公众号:码农架构

相关文章

  • 唯有套路得人心:谈谈Java EE的那些模式

    背景和概念 我相信很多人都接触过面向对象模式,可是,模式是个通用词,面向对象只是其中的一个分支而已。事实上,我们本...

  • 老黄

    自古深情留不住,唯有套路得人心

  • 套路得人心

    自古深情留不住,唯有套路得人心 ---------------------------------------- ...

  • 2019.6.5

    自古真情留不住,唯有套路得人心

  • 撰写产品文案,学会这3种套路就行了

    这个世界唯有套路得人心,产品文案也有套路,今天姚飞和大家分享3种广告文案的套路模式,你就可以为任何产品撰写广告文案...

  • 泡妞约会恋爱交友视频教程集合|唯有套路得人心 极品教程

    泡妞约会恋爱交友视频教程集合|唯有套路得人心 极品教程 自古真情留不住,唯有套路得人心。无作为认为,真情才是本质上...

  • 喂,你长得好像一个人

    文/许一 你听过那些有趣的撩人方式?自古套路深得人心,但是套路总是留不住的,唯有深情才能撩到人心。 最...

  • 套路

    自古真情留不住,唯有套路得人心啊! 人都是这样 喜欢套路 或者被套路! 哈哈哈

  • 唯有套路得人心???

    老是听见一句话:自古深情留不住,唯有套路得人心! 看似有那么点道理!但是只是看似而已。 套路或许可以得到一时好感,...

  • 唯有套路得人心

    最近接触到了一个平台,这个平台的后端很厉害,首先这个平台的内容是刚需。 通过免费课程就可以圈一波精准的粉丝,上完课...

网友评论

    本文标题:唯有套路得人心:谈谈Java EE的那些模式

    本文链接:https://www.haomeiwen.com/subject/vwdlbktx.html