框架设计的本质

栏目: Java · 发布时间: 5年前

原创声明 :本文系作者原创,谢绝个人、媒体、公众号或网站 未经授 转载,违者追究其法律责任。

框架设计的本质是一个非常大的话题,专门为此写一本书都有可能,不过写书远远超出笔者的能力。本文从一个很小的点切入,仅简单介绍笔者理解的框架设计的本质,并基于此分析部分开源框架的内部实现。如果您有不一样的观点,欢迎留言探讨。受限于笔者的能力范围,本文介绍和分析的框架均使用 Java 语言实现,但这并不意味着本文介绍的框架设计的本质仅适用于 Java,事实上它适用于任何一门编程语言实现的软件框架。

维基百科软件框架词条列出了软件框架与软件库或应用之间关键的三点区别:

  1. 反转控制 (Inversion of Control) - 框架控制应用的流程,而不是调用者。

  2. 扩展性 (extensibility) - 应用可以扩展框架的功能。

  3. 框架本身不可修改 (non-modifiable framework code) - 应用扩展框架的功能且无需修改框架自身的代码,即遵循 OCP 原则。

所以,软件框架设计的本质是为软件框架设计一套良好的扩展机制。在框架中,实现丰富的功能很重要,更重要的是框架有一套良好的扩展机制,基于这套扩展机制用户不仅可以扩展框架的功能,还能替换框架已实现的功能。

观察 Java 社区的开源框架,优秀的框架都有一套良好的扩展机制,这套机制可以使框架应对不断变化的业务需求。比如:

  • Tapestry 5 开发了可扩展的 IOC 容器

  • Spring Web MVC 建立在 Spring IOC 之上。

  • Dubbo 实现了一套扩展机制 ExtensionLoader

下面以 Spring Web MVC 为例分析一下在 Spring IOC 之上如何实现它的扩展机制。

Spring Web MVC 的核心是 DispatcherServlet,DispatcherServlet 使用一些接口处理 HTTP 请求生成 HTTP 响应,比如 HandlerMapping 接口把 HTTP 请求

映射到一个处理器以及一些前置、后置拦截器,ViewResolver 接口把逻辑视图解析为渲染 HTTP 响应的 View 对象。

DispatcherServlet 初始化时,首先使用 工具 方法 org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors 从 Spring ApplicationContext 中获取接口的实现,找不到则从配置文件 DispatcherServlet.properties 获取默认实现类并注册到 ApplicationContext 中。如果应用需要使用自定义的渲染引擎渲染 HTTP 响应,实现 ViewResolver 接口并把实现类注册到 Spring ApplicationContext 中就能扩展 ViewResolver,

替换或扩展 Spring Web MVC 的默认实现。

结合前面介绍的框架三要素简单分析一下 Spring Web MVC 的扩展机制:

  1. 构建在 Spring IOC 之上;

  2. 实现 Spring Web MVC 定义的 接口 来扩展框架的功能;

  3. 在 Spring IOC 中注册自定义实现的类就能使用扩展的功能,不需要修改框架的代码。

本文介绍了笔者理解的软件框架设计的本质:设计一套良好的扩展机制,并分析了 Spring Web MVC 的扩展机制。那么问题来了,设计框架时如何设计、实现一套满足以上三个要素的轻量级通用可扩展机制呢?欢迎各位看官在留言中提供您的设计、实现方案。

参考:

  1. 软件框架:https://en.wikipedia.org/wiki/Software_framework

  2. IOC 容器:http://tapestry.apache.org/ioc.html

  3. OCP 原则:https://en.wikipedia.org/wiki/Open/closed_principle

  4. Tapestry 5:http://tapestry.apache.org/

  5. Spring Web MVC:https://projects.spring.io/spring-framework/

  6. Dubbo:http://dubbo.io/

近期热文

框架设计的本质
框架设计的本质

长按二维码关注我们 ▶▶▶

框架设计的本质

点击【阅读原文】获取招聘信息或发送简历到 sofa@cloud.alipay.com,期待您的加入!


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

查看所有标签

猜你喜欢:

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

从零开始学微信公众号运营推广

从零开始学微信公众号运营推广

叶龙 / 清华大学出版社 / 2017-6-1 / 39.80

本书是丛书的第2本,具体内容如下。 第1章 运营者入门——选择、注册和认证 第2章 变现和赚钱——如何从0到100万 第3章 决定打开率——标题的取名和优化 第4章 决定美观度——图片的选取和优化 第5章 决定停留率——正文的编辑和优化 第6章 决定欣赏率——版式的编辑和优化 第7章 数据的分析——用户内容的精准营销 书中从微信运营入门开始,以商业变......一起来看看 《从零开始学微信公众号运营推广》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具