关于什么是框架

2023-09-22 09:20:44


框架(Framework)是一个框子——指其约束性,也是一个架子——指其支撑性。

IT语境中的框架,特指为解决一个开放性问题而设计的具有一定
性的支撑结构。在此结构上约束可以根据具体问题扩展、安插更多的组成部分,从而更迅速和方便地构建完整的解决问题的方案。

目前还没看到什么有趣的个人化解释,可能是因为要解决都复杂到设计出框架来解决的问题的人比大多数有情趣的人来说都更感觉boring吧,所以……嘿嘿!

也就是说:1)框架本身一般不完整到可以解决特定问题;2)框架天生就是为扩展而设计的;3)框架里面可以为后续扩展的组件提供很多辅助性、支撑性的方便易用的实用工具(utilities),也就是说框架时常配套了一些帮助解决某类问题的库(libraries)或工具(tools)。

约束性:针对解决特定问题的软件框架会首先定义问题的边界,进而将相关的软件组件约束在这个边界内,保持框架在解决问题方面上的内聚性。

支撑性:框架本身是不解决什么问题的,但给了解决问题的相关组件一个插接、组合的底子,这个底子的科学性和易用性直接影响到在此之上进行进一步开发的科学性和方便性。

框架不一定只是解决软件开发问题,也可以解决软件工程问题(比如Microsoft Solution Framework)或信息系统等问题。


库和框架都是一种有别于软件、面向程序开发者的产品形式。正因为如此,也有很多人误以为库就是框架,或者认为指定语言的库就是框架。

库的英语为 Library ( 简写 Lib ),框架的英语为 Framework。

库是将代码集合成的一个产品,供程序员调用。面向对象的代码组织形式而成的库也叫类库。面向过程的代码组织形式而成的库也叫函数库。在函数库中的可直接使用的函数叫库函数。开发者在使用库的时候,只需要使用库的一部分类或函数,然后继续实现自己的功能。

框架则是为解决一个(一类)问题而开发的产品,框架用户一般只需要使用框架提供的类或函数,即可实现全部功能。可以说,框架是库的升级版。开发者在使用框架的时候,必须使用这个框架的全部代码。框架和库的比较可以想像为:假如我们要买一台电脑。框架为我们提供了已经装好的电脑,我们只要买回来就能用,但你必须把整个电脑买回来。这样用户自然轻松许多,但会导致很多人用一样的电脑,或你想自定义某个部件将需要修改这个框架。而库就如自己组装的电脑。库为我们提供了很多部件,我们需要自己组装,如果某个部件库未提供,我们也可以自己做。库的使用非常灵活,但没有框架方便。

框架一般指的是会调用你的代码的东东,库一般指的是会被你调用的东东:这个也不是绝对的。框架和库都是代码库,你在某个库的约束下开发,那这个库就是框架,你不受它的约束,那它就是库。

更多推荐

【docker安装Mysql并配置主从复制】

Mysql主从复制目的:是为了后面naocs集群的服务配置做准备工作准备工作准备至少两台虚拟机或服务器,安装好了docker,找到他们的ip地址后面操作都用xshell操作来代替拉取并启动mysql镜像和容器主机的命令为mysql01,对外端口用3310来连接dockerrun-d-p3310:3306-v/home/

ubuntu在线直接升级

前几天VMware上安装了ubuntu,当时的内核版本支持(ipguard,加密软件),后来ubuntu自动升级了linux内核,导致加入软件不支持,无法访问加密文件了。后来加密软件商更新了软件,但还是赶不上linux内核更新速度,还是不能用。之前我写过手动升级内核的方法,实在有些复杂,所以借助chatgpt的提示和摸

Vuex —— 状态管理 | Module

在前面讲到了关于Vuex数据状态管理的内容,讲了Vuex的五大核心属性,在这五大核心属性中就state、mutation和actions在前面介绍Vuex状态管理和讲Vuex中的同步和异步操作已经比较熟悉了,getter是基于state的计算属性,vue中computed从data中派生出的计算属性,vuex中gett

【校招VIP】java语言考点之嵌套类&内部类

考点介绍:嵌套类&内部类问题在校招面试中经常出现。以在一个类的内部定义另一个类,这种类称为嵌套类(nestedclasses),它有两种类型:静态嵌套类和非静态嵌套类。静态嵌套类使用很少最重要的是非静态嵌套类,也即是被称作为内部类(inner)。java语言考点之嵌套类&内部类-相关题目及解析内容可点击文章末尾链接查看

如何搭建Linux环境

W...Y的主页😊代码仓库分享💕当我们想要搭建一个Linux系统,我们应该怎么使用呢?今天我就带领大家搭建Linux系统!!!目录Linux环境安装双系统(不推荐)powwershell(不推荐)虚拟机+centos7镜像使用云服务器(推荐)XShell下的复制粘贴Linux环境安装双系统(不推荐)在计算机上安装L

Linux MQTT智能家居(源码使用分析)

文章目录前言一、连接服务器1.初始化客户端2.设置端口号设置IP地址3.连接服务器二、发布消息三、订阅消息总结前言本篇文章开始我们来分析一下大佬写的MQTT源码,并且来看看怎么样使用MQTT连接到服务器。MQTT源码地址:源码地址这里找到源码中的test.c进行分析:一、连接服务器1.初始化客户端首先使用mqtt_le

Linux MQTT智能家居(ubantu和ARM中使用MQTT)

文章目录前言一、在ubantu中使用MQTT1.安装cmake2.编译MQTT库二、在ARM中使用MQTT三、使用自己的服务器四、ARM板服务器MQTTX三者关系五、MQTTX的使用六、ARM使用MQTT的方法1.修改MQTT源码2.使用库3.把MQTT源码加入到自己的工程总结前言本篇文章将会带大家在ubantu和AR

elementui-slider 滑动时会重置为0的问题解决

文章目录问题描述:问题排查问题解决总结问题描述:首次打开有elementui-slider的页面,不管滑动哪个滑块,滑动时都会自动归0(划得动,但是会自动回到最左侧0的位置),但是他确实触发了change函数。问题排查尝试了很多方法,包括将slider的值设置为number类型,虽然它本身就是number,用了一个干净

Webserver项目解析

一.webserver的组成部分Buffer类用于存储需要读写的数据Channel类存储文件描述符和相应的事件,当发生事件时,调用对应的回调函数ChannelMap类Channel数组,用于保存一系列的ChannelDispatcher监听器,可以设置为epoll类型/select类型/poll类型。HttpReque

云计算的下一个飞跃:容器编排与Kubernetes最新趋势解析

文章目录容器和容器编排的基础什么是容器?什么是容器编排?Kubernetes的崛起Kubernetes的最新趋势1.云原生生态系统的增长2.云原生安全性3.边缘计算支持4.多集群管理5.GitOps的兴起总结🎉欢迎来到云计算技术应用专栏~探索Java中的静态变量与实例变量☆*o(≧▽≦)o*☆嗨~我是IT·陈寒🍹✨

CDN加速器有哪些?

一、前端使用CDN加速的优缺点1.CDN优点(1).提高网站性能:CDN(内容分发网络)可以将静态资源(如脚本、样式表、图片等)缓存在服务器节点上,并通过就近访问用户,从而提供更快的加载速度和更好的用户体验。(2).减轻源服务器负载:CDN可以将用户请求的静态资源分发到全球各个边缘节点,从而将访问流量分散到多个服务器上

热文推荐