美文网首页
框架设计的本质

框架设计的本质

作者: 37ac9d609353 | 来源:发表于2018-12-17 16:20 被阅读55次

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

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

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

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

框架本身不可修改 (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 的扩展机制:

构建在 Spring IOC 之上;

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

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

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

参考:

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

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

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

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

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

Dubbo:http://dubbo.io/

公众号:金融级分布式架构(Antfin_SOFA)

相关文章

  • 框架设计的本质

    原创声明:本文系作者原创,谢绝个人、媒体、公众号或网站未经授权转载,违者追究其法律责任。 框架设计的本质是一个非常...

  • 【软件】概要设计要点摘录

    概要设计的本质:是一个由设计师根据用户交互过程和用户需求来形成交互框架和视觉框架的过程; 概要设计的结果:往往以反...

  • 架构设计之道

    Tech 导读 本文主要从架构设计的本质、架构设计原则、架构设计方法论三个方面来进行阐述,架构设计除了掌握技术框架...

  • Struts2

    设计目标1.Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计...

  • JavaWeb了解之SpringMVC篇1

    SpringMVC:Spring提供的基于MVC设计模式的轻量级Web开发框架(本质:对Servlet的进一步封装...

  • RxJava源码解析:操作符之map

    前言 RxJava框架运用了装饰设计模式(ps.叫静态代理也行,关于两种设计模式的区别)其中几乎所有的操作符本质是...

  • Struts2学习笔记 - 第001天

    简介 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中...

  • Struts2

    一、 Struts2是一中基于MVC设计模式的web应用框架,是一个轻量级框架,本质上相当于一个servlet,在...

  • Struts2学习笔记

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,St...

  • 一、struts2 入门

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,St...

网友评论

      本文标题:框架设计的本质

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