框架设计的本质

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

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

框架设计的本质是一个非常大的话题,专门为此写一本书都有可能,不过写书远远超出笔者的能力。本文从一个很小的点切入,仅简单介绍笔者理解的框架设计的本质,并基于此分析部分开源框架的内部实现。如果您有不一样的观点,欢迎留言探讨。受限于笔者的能力范围,本文介绍和分析的框架均使用 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,期待您的加入!


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

查看所有标签

猜你喜欢:

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

并发的艺术

并发的艺术

Clay Breshears / 聂雪军 / 机械工业出版社 / 2010年9月 / 49.00元

如果你希望通过并发编程来充分发挥多核处理器的强大功能,那么本书将为你提供所需的理论知识和实际经验。《并发的艺术》是为数不多的几本介绍如何在多核处理器的共享内存模型中实现算法的书籍之一,它并非仅仅介绍一些理论模型或者分布式内存架构。本书详细分析了各种示例程序,这些内容非常有助于你将串行代码转换为并行代码,此外还介绍了如何避免一些常见的错误。 本书的作者是Intel公司的一位资深工程师,他从事并......一起来看看 《并发的艺术》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试