框架是什么

「框架」一词在编程术语中使用的频繁程度绝对排前五, 框架的数量也成百上千倍于编程语言, 任何一门编程语言都会搭配上一定数据的框架用以提升开发软件产品的效率。 随便举几个例子

JavaScript:jquery 、angular、seajs、vue ……

Java:spring、struts、 hibernate、 junit ……

C#:asp.net、wpf、winform、asp.net mvc ……

python:django、diesel、dpark、webpy ……

php:ci、yii、zend、laravel……

从宏观的层面来看, 软件是成品, 编程语言是制作软件的工具,而框架就是软件的雏形, 是软件的一个抽像的形态, 这一点不难理解 , 相信程序员也都是了解的。

然而从微观的角度来做细致的观察, 将框架这一概念从里到外理解透彻就没那么容易了。

先把框架的概念定义的一下: 在程序设计中, 框架是构成一类特定软件可复用设计的一组相互协作的类。

这一概念的定义出自软件开发行业一本著名的书籍《设计模式》。粗略一看会觉得这个定义极度抽像,难以理解 ,很难根据描述在脑子中形成具体的概念。其实我们可以把这个定义拆分为三个部份来逐个分析

  1. 构成某一类特定的软件
  2. 一组可复用的类
  3. 这组类是相互协作的

只要是满足这三点的程序代码就可以被称之为框架。 事实上只要满足前面二点, 第三点也就无条件满足了, 一组可复用的类不相互协作的可能性几乎为零, 换句话说只要满足前面二点就肯定是一个框架了。 我们来挑几个前面列出的框架的例子来进行具体的分析,以达到更清晰的表述框架概念的目的。

asp.net

微软家开发网站的技术,使用的语言C#(可替换成.net平台下的任何一种语言)。首先, 这种技术是否是用来开发某一类特定的软件的?显然,这个条件是满足的, 它就是用来开发网站的, 网站当然是某一类特定的软件 。 asp.net中有可重复使用的类吗?这个条件也是满足的, system.web命名空间下的类基本都是为asp.net准备的。 因此, asp.net符合框架的定义, 它是一个使用C#语言来开发网站的框架。

spring

用来开发Java网站的一组类库。 先说第二个条件,它是一组可复用的类吗? 这是废话, 前面第一句话就说了spring就是一组类库。 那么它是用来开发某一类特定的软件的吗? 也是, spring就是用来开发Java网站的。 两个条件都满足, spring就是一个框架, 一个用来开发Java网站的框架。 但是,请等等… spring的确是基于Java,然而,更确切的说它应该是基于servlet的,servlet才是基于Java的, 而servlet也是一组可复用的Java类, 并且是用来开发Java网站的。 因此, 可以说servlet才是基于Java的用来开发网站的框架, 而spring是在servlet的基础上进行的封装,因此, 更精确的说法是它是用来开发servlet的网站的框架。 甚至我个人觉得,spring就是用来开发Java网站的一组类库, 是对servlet的封装,根本算不上一个框架, 因为开发Java网站的框架从来都只是servlet。你可以说它是用来开发servlet网站的, 是用来开发spring网站的, 但是事实上它们都是Java网站, 而Java网站就是用servlet框架开发的,因此spring只能算是一组用来方便解决问题的类库。

hibernate

第二个条件满足,它Java中用来实现数据库操纵和对象关系映射的一系列类, 而且可以复用。 那它是用来开发某一类特定的软件的吗?是hibernate应用程序 ? 看似合理但好像也站不住脚,这算是什么程序;关系对象映射应用程序 ?也没听过;基于Java的数据库管理程序? 咦!这个好像听说过,但是关hibernate什么事,这是jdbc的事情呀。 因此,个人认为hibernate不能算是一个框架, 它只是一组方便解决问题的类。

jQuery

它是一组可复用的类库吗?算它是吧,JavaScript不是纯面向对象的语言,但看在jquery流行的份上, 我们就当它的设计思路是正确的, 至于是不是面向对象,其实并不要。 而且最重要的是jquery是可以复用的。 但它是用来开发某类特定的软件的吗? JavaScript特效? 用JavaScript自己就可以了。 jquery程序?jquery特效? 好像没有这个说法呀! 那jquery倒底是不是框架呢?网上普遍认为是, 但我却是持否定的态度的,至少我找不到在哪一个层面可将之视为框架理由。给我的感觉,jquery就是用来增加开发效率的一组用JavaScript编写的功能而以, 并不是框架。jquery就是js,两者并不用区分的很清楚。

以上这些只是我个的理解 。 框架是一个很抽像并且边界很难界定的概念,不同的人都会有不同的理解。我们自己也可以开发框架, 比如说用来解决某些常见且工作经常重复的问题, 如网站后台管理系统,都是一系列增删查改的操作, 因此可以以解决这个需求为目标开发一套通用的系统, 适用与所有的网站后台管理系统,而且也只适用于网站后台管理系统, 我们可以把它称之为「xxx网站管理系统框架」。

脱离软件开发领域, 我们可以将框架这一概念泛化,比如我们可以说框架是「做某类特定事情的流程和资源」。 比如说肯德基的生产,在某一地区,肯德基的原料提供、制作流程、调料配置、食物味道在任何门店都是一样的,因为肯德基就有这么一套生产食品的模式,换种说法就是框架, 只要按照这个框架的定义来制作,就能让顾客吃出肯德基石的味道。再举个别的例子, 如房地产开发商开发楼盘,拍地、销售、建造、交房、物业管理…从开始到结束不也是一套框架吗?以这样一种模式去实践就能开发出一个能住人的楼盘来。

因此, 框架并不是在软件开发中独有的,甚至除人类以外的任何生物都可以有自己的框架, 它是一种用来解决特定问题的方法。

本文分享自微信公众号 - 带你撸出一手好代码(gh_afab56b37671)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-02-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏猿天地

Spring cloud Zuul Filter 使用小经验

前言 Filter 我们用的比较多,大部分是Servlet中的Filter,通常我们用来做一些拦截,权限验证之类的工作。 今天介绍的Filter是Zuul中提供...

45060
来自专栏技术碎碎念

Servlet响应的中文字符集问题

在Servlet中利用response向客户端浏览器输出中文时有时会遇到乱码问题,总结如下: response输出流有两种,一是以字节流输出,一是以字符流输出。...

38480
来自专栏技术碎碎念

数据的分页处理

当页面中要显示的内容过多需要分多页显示、或是数据量过大内存吃不消时,需要分页处理。 原理:每次从数据库中取出一定量的数据,通过jsp页面显示 实现: ①写一个类...

32350
来自专栏ImportSource

并发编程-原子性

前面我们说了有关stateless的内容,那么如果我们在一个stateless的object中添加一个状态元素会发生什么呢?现在假设我们想要添加一个命中计数器(...

429110
来自专栏技术碎碎念

jdbc基础 (五) 连接池与数据源 DBCP以及C3P0的使用

一、连接池的概念和使用 在实际应用开发中,特别是在WEB应用系统中,如果JSP、Servlet或EJB使用JDBC直接访问数据库中的数据,每一次数据访问请求都必...

35260
来自专栏nnngu

JSP 和 Servlet 的工作原理和生命周期

JSP的英文名叫Java Server Pages,翻译为中文是Java服务器页面的意思,其底层就是一个简化的Servlet设计,是由sum公司主导参与建立的一...

34440
来自专栏JavaQ

深入理解Spring系列之十:DispatcherServlet请求分发源码分析

DispatcherServlet是SpringMVC的核心分发器,它实现了请求分发,是处理请求的入口,本篇将深入源码分析它的请求分发过程。可点击文末左下角“阅...

37290
来自专栏iOS技术杂谈

SpringMVC DispatcherServlet执行流程及源码分析你要知道的SpringMVC DispatcherServlet执行流程及源码分析都在这里

你要知道的SpringMVC DispatcherServlet执行流程及源码分析都在这里 转载请注明出处 https://cloud.tencent.com/...

63170
来自专栏BeJavaGod

使用shiro自定义过滤器,拦截ajax请求,可用于动静分离

shiro,不多说了,都知道是权限框架 用过shiro的都知道shiro自己有各种过滤器,只要配置好了就可以自动过滤,自动跳转到对应的页面,比如:认证,授权,退...

73650
来自专栏技术碎碎念

servlet设置缓存时间以及文件的下载

缓存时间的设置: 1 public void doGet(HttpServletRequest request, HttpServletResponse res...

39070

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励