当前位置: 首页 > news >正文

关于什么是框架


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

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

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

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

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

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

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


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

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

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

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

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

相关文章:

关于什么是框架

框架(Framework)是一个框子——指其约束性,也是一个架子——指其支撑性。 IT语境中的框架,特指为解决一个开放性问题而设计的具有一定 性的支撑结构。在此结构上约束可以根据具体问题扩展、安插更多的组成部分,从而更迅…...

iOS开发Swift-集合类型

集合基本类型&#xff1a;数组 Array (有序)&#xff0c; 集合 Set (无序不重复)&#xff0c; 字典 Dictionary (无序键值对) 1.数组 Arrays (1)数组的表示 Array<Element> [Element](2)创建空数组 var someInts: [Int] [] someInts.count //数组长度(3)带值数组 var…...

【keepalived双机热备与 lvs(DR)】

目录 一、概述 1.简介 2.原理 3.作用 二、安装 1.配置文件 2.配置项 三、功能模块 1.core 2.vrrp 3.check 四、配置双机热备 1.master 2.backup 五、验证 1.ping验证 2.服务验证 六、双机热备的脑裂现象 七、keepalivedlvs&#xff08;DR&#xff09; 1.作…...

C++笔记之静态成员函数可以在类外部访问私有构造函数吗?

C笔记之静态成员函数可以在类外部访问私有构造函数吗&#xff1f; code review! 静态成员函数可以在类外部访问私有构造函数。在C中&#xff0c;访问控制是在编译时执行的&#xff0c;而不是在运行时执行的。这意味着静态成员函数在编译时是与类本身相关联的&#xff0c;而不…...

最新SQLMap进阶技术

SQLMap进阶&#xff1a;参数讲解 &#xff08;1&#xff09;–level 5&#xff1a;探测等级。 参数“–level 5”指需要执行的测试等级&#xff0c;一共有5个等级&#xff08;1~5级&#xff09;&#xff0c;可不加“level”&#xff0c;默认是1级。可以在xml/payloads.xml中看…...

【BurpSuite常用功能介绍】

BurpSuite的使用 1.运行BurpSuite 2.代理设置 打开软件后&#xff0c;我们第一件事就应该去调试软件和浏览器的代理&#xff0c;让BURP能够正常工作抓包 proxy--options&#xff0c;我端口默认使用8080 然后我们打开一个浏览器&#xff0c;进入代理设置 (注意一点&#xff0…...

Leetcode 108. 将有序数组转换为二叉搜索树

108. 将有序数组转换为二叉搜索树 分析 给定一个有序数组&#xff0c;要求转换为二叉搜索树。 数组是有序的&#xff0c;并且要求二叉树。 这里看到数组是有序的&#xff0c;马上想到二分&#xff0c;但是又不需要完全二分 实现。 再复习二叉搜索树的结构特点&#xff1a; 左…...

小匠物联联合亚马逊云助力企业数智化出海

如何让家电企业出海产品数智化之路走上康庄大道&#xff1f;8月25日,亚马逊云科技[创新成长企业专列]这趟上云快车将开往宁波站&#xff0c;助力宁波的制造、软件等企业扬帆起航&#xff01;现场举办“亚马逊云科技助力企业出海数智沙龙”&#xff0c;小匠物联受邀出席。 会议现…...

(五)k8s实战-配置管理

一、ConfigMap 使用 kubectl create configmap -h 查看示例&#xff0c;构建 configmap 对象 1) 基于文件夹&#xff0c;加载文件夹下所有配置文件&#xff0c;创建 kubectl create configmap <configmapName> --from-file<dirPath>2) 指定配置文件&#xff0c;创…...

GPT---1234

GPT:《Improving Language Understanding by Generative Pre-Training》 下载地址:https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdfhttps://cdn.openai.com/research-covers/language-unsupervised/language_understa…...

计算机竞赛 基于大数据的时间序列股价预测分析与可视化 - lstm

文章目录 1 前言2 时间序列的由来2.1 四种模型的名称&#xff1a; 3 数据预览4 理论公式4.1 协方差4.2 相关系数4.3 scikit-learn计算相关性 5 金融数据的时序分析5.1 数据概况5.2 序列变化情况计算 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &…...

python进行数据分析:数据预处理

六大数据类型 见python基本功 import numpy as np import pandas as pd数据预处理 缺失值处理 float_data pd.Series([1.2, -3.5, np.nan, 0]) float_data0 1.2 1 -3.5 2 NaN 3 0.0 dtype: float64查看缺失值 float_data.isna()0 False 1 …...

百度Apollo:引领自动驾驶技术的创新与突破

文章目录 前言一、技术创新二、开放合作三、生态建设四、安全可靠性总结 前言 随着科技的迅猛发展&#xff0c;自动驾驶技术正成为未来交通领域的重要发展方向。在这个领域中&#xff0c;百度Apollo作为中国领先的自动驾驶平台&#xff0c;以其卓越的创新能力和开放合作精神&a…...

Python爬虫 异步、缓存技巧

在进行大规模数据抓取时&#xff0c;Python爬虫的速度和效率是至关重要的。本文将介绍如何通过异步请求、缓存和代理池等技巧来优化Python爬虫的速度和性能。我们提供了实用的方案和代码示例&#xff0c;帮助你加速数据抓取过程&#xff0c;提高爬虫的效率。 使用异步请求、缓…...

YOLOv5屏蔽区域检测(选择区域检测)

YOLOv5屏蔽区域检测以及选择区域检测 前期准备labelme选择mask区域 代码改动 前期准备 思路就是通过一个mask掩膜&#xff0c;对我们想要屏蔽或者选择的区域进行遮挡处理&#xff0c;在推理的时候&#xff0c;将有mask掩膜的图像输入&#xff0c;将最后的结果显示在原始图像上…...

记录一次presto sql执行报错 Error executing query的解决办法

在执行presto sql 时报错截图如下&#xff1a; 查看后台执行报错日志&#xff1a; java.sql.SQLException: Error executing query at com.facebook.presto.jdbc.PrestoStatement.internalExecute(PrestoStatement.java:307) at com.facebook.presto.jdbc.PrestoStatement.exe…...

Android Studio开发之路 (五)导入OpenCV以及报错解决

一、步骤 官网下载opencv包&#xff08;我下的是4.7.0&#xff09;并解压&#xff0c;openvc官网 先创建一个空项目&#xff0c;简单跑一下能正常输出helloworld 点击file->new->Import Module选择解压之后的opencv-android-sdk文件夹中的SDk文件夹&#xff0c; modu…...

vue3.3中ref和reactive原理源代码分析

源码是ts编写的,这里部分简化成js便于阅读 function ref(value) {return createRef(value, false) }function createRef(rawValue, shallow) { //shallow是否是浅层定义数据,用于区别ref和shallowRefif (isRef(rawValue)) {//如果已经是ref直接返回源数据return rawValue}retu…...

10.Oracle中decode函数

【函数格式】&#xff1a; decode ( expression, condition_01, result_01, condition_02, result_02, ......, condition_n, result_n, result_default) 【函数说明】&#xff1a; 若表达式expression值与condition_01值匹配&#xff0c;则返回result_01&#xff0c;…...

Podman安装部署kafka和管理界面(快速跑起来)

#1.拉取镜像 podman pull bitnami/zookeeper podman pull bitnami/kafka#2.创建子网 podman network create knet#3.创建zookeeper podman run -itd --name zookeeper-server -p 2181:2181 \ --net knet \ -e ALLOW_ANONYMOUS_LOGINyes \ bitnami/zookeeper:latest#3.1查看z…...

城市生活垃圾焚烧过程参数的智能自主设定方法【附程序】

✨ 长期致力于城市生活垃圾、焚烧过程、智能自主、参数设定、设定方法软件研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;基于学习型伪度量方法的焚烧…...

工业质检落地新思路:拆解SimpleNet如何用‘特征空间加噪’搞定缺陷检测

工业质检革命&#xff1a;SimpleNet如何用特征空间扰动突破小样本缺陷检测瓶颈 在PCB板生产线上&#xff0c;一个肉眼几乎不可见的焊点虚接可能导致整批产品报废&#xff1b;在汽车零部件装配车间&#xff0c;细微的划痕可能引发后续使用中的安全隐患。传统工业质检依赖人工目检…...

从一次数据解析Bug说起:彻底搞懂QString的toLocal8Bit、toUtf8和toLatin1该用哪个

从一次数据解析Bug说起&#xff1a;彻底搞懂QString的编码转换选择 上周排查一个网络协议解析问题时&#xff0c;遇到一个典型的编码陷阱&#xff1a;服务端返回的GBK编码数据包&#xff0c;在Qt客户端用toUtf8()解析后出现乱码。这个看似简单的编码问题背后&#xff0c;隐藏着…...

指纹浏览器缓存机制原理与环境数据安全管控策略

引言绝大多数使用者在日常运用指纹浏览器搭建独立虚拟浏览环境时&#xff0c;重点注意力都集中在硬件指纹修改、代理网络绑定、基础参数调试等显性操作之上&#xff0c;往往忽略了软件内部缓存运行机制带来的各类隐性影响。虚拟环境运行过程中自动生成的页面缓存、站点数据、本…...

RK3588 LGA核心板:高性能嵌入式开发的模块化解决方案

1. 项目概述&#xff1a;当旗舰SoC遇见极致封装最近在嵌入式圈子里&#xff0c;一个“小而强”的组合引起了我的注意&#xff1a;瑞芯微的旗舰级SoC RK3588&#xff0c;被塞进了一个极其紧凑的LGA封装里&#xff0c;做成了名为SOM-3588-LGA的核心板&#xff0c;并且已经现货发售…...

WinMerge对比日志和备份文件?用过滤器精准匹配,效率翻倍

WinMerge对比日志和备份文件&#xff1f;用过滤器精准匹配&#xff0c;效率翻倍 在日常运维和办公场景中&#xff0c;我们经常需要对比不同版本的日志文件或备份文件。比如app.log.1和app.log.2的差异分析&#xff0c;或者report_20240520.xlsx与report_20240521.xlsx的内容比对…...

MySQL 8.3远程连接踩坑记:Navicat提示caching_sha2_password错误的完整修复流程

MySQL 8.3远程连接认证插件问题深度解析与实战修复指南 1. 问题现象与背景分析 那天下午&#xff0c;当我正尝试用Navicat Premium 16连接新部署的MySQL 8.3数据库时&#xff0c;屏幕上突然弹出的红色错误框让我的咖啡杯悬在了半空&#xff1a; Authentication plugin caching_…...

Perplexity财经数据查询失效的4个致命信号,第3个95%用户仍在踩坑——附权威校验脚本(Python版)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Perplexity财经数据查询失效的4个致命信号&#xff0c;第3个95%用户仍在踩坑——附权威校验脚本&#xff08;Python版&#xff09; 信号一&#xff1a;HTTP状态码非200但响应体含“success”: true Perplexit…...

Arm Ethos-U65 NPU性能监控单元(PMU)架构与应用解析

1. Arm Ethos-U65 NPU性能监控单元架构解析 性能监控单元&#xff08;PMU&#xff09;是现代处理器架构中不可或缺的调试与分析模块&#xff0c;尤其在AI加速器领域更是性能调优的关键工具。Arm Ethos-U65 NPU作为面向嵌入式设备的神经网络处理器&#xff0c;其PMU设计充分考虑…...

别再只用默认模型了!手把手教你用SnowNLP训练专属情感分析模型(附完整代码)

突破SnowNLP默认模型局限&#xff1a;打造高精度领域情感分析系统的实战指南 从"水土不服"到精准预测&#xff1a;为什么你需要自定义情感模型 去年夏天&#xff0c;我们的产品团队在分析用户反馈时遇到了一个诡异现象&#xff1a;明明用户留言中充斥着"卡顿严重…...