为什么要使用微软的 Application Framework?

我是荔园微风,作为一名在IT界整整25年的老兵,今天来看一下我们为什么要使用微软的 Application Framework?
虽然Application Framework 并不是新观念,它们却在最近数年才成为 PC 平台上软件开发的主流工具。面向对象语言是具体实现Application Framework 的理想载具,而C++ 编译器在PC平台上的出现与普及终于允许主流PC程序员能够享受Application Framework 带来的利益。
从八十年代早期到九十年代初始,C++大都存在于UNIX 系统和研究人员的工作站中,不在PC 以及商业产品上。C++ 以及其它的面向对象语言(例如 Smalltalk-80)使一些大学和研究计划生产出现今商业化Application Framework 的鼻祖。但是这些早期产品并没有明显区隔出应用程序与 Application Framework 之间的界线。
今天应用软件的功能愈来愈复杂,建造它们的工具亦复如此。Application Framework、Class Library 和GUI toolkits 是三大类型的软件开发工具(请见方块说明),这三类工具虽然以不同的技术方式逼近目标,它们却一致追求相同而基本的软件开发关键利益:降低写程序代码所花的精力、加速开发效率、加强可维护性、增加强固性(robustness)、为组合式的软件机能提供杠杆支点(有了这个支点,再大的软件我也举得起来)。
当我们面临软件工业革命,我们的第一个考虑点是:我的软件开发技术要从哪一个技术面切入?从raw API 还是从高阶一点的工具?如果答案是后者,第二个考虑点是我使用哪一层级的工具?GUI toolkits 还是Class Library 还是 Application Framework?如果答案又是后者,第三个考虑点是我使用哪一套产品?MFC 或 OWL 或 Open Class Library?
(目前 PC 上还没有第四套随编译器附赠的 Application Framework 产品)
别认为这是领导者的事情不是我(工程师)的事情,有这种想法你就永远当不成领导者。也别认为这是工程师的事情不是我(学生)的事情,学生的下一步就是工程师;及早想点工业界的激烈竞争,对你在学生阶段规划人生将有莫大帮助。
我相信,Application Framework 是最好的杠杆支点。
Application Framework,Class Library,GUI toolkit
一般而言,Class Library 和 GUI toolkit 比 Application Framework 的规模小,定位也没那么高阶宏观。Class Library 可以定义为「一组具备面向对象性质的类,它们使应用程序的某些功能实现起来容易一些,这些功能包括数值运算与数据结构、绘图、内存管理等;这些类可以一片一片毫无瓜葛地并入应用程序内」。
请特别注意这个定义中所强调的「一片一片毫无瓜葛」,而不像 Application Framework 是大伙儿一并加入。因此,你尽可以随意使用 Class Library,它并不会强迫你遵循任何特定的程序架构。Class Library 通常提供的不只是 UI 功能、也包括一般性质的机能,像数据结构的处理、日期与时间的转换等等。
GUI toolkit 提供的服务类似Class Library,但它的程序接口是程序导向而非面向对象。而且它的功能大都集中在图形与 UI 接口上。GUI toolkit 的发展历史早在面向对象语言之前,某些极为成功的产品甚至是以汇编语言(assembly)写成。不要必然地把GUI 联想到Windows,GUI toolkit也有DOS 版本。我用过的Chatter Box 就是 DOS 环境下的 GUI 工具(是一个函数库)。
使用 Application Framework 的最直接原因是,我们受够了日益暴增的 Windows API。把MFC 想象为第四代语言,单单一个类就帮我们做掉原先要以一大堆 APIs 才能完成的事情。
但更深入地想,Application Framework绝不只是为了降低我们花在浩瀚无涯的Windows API 的时间而已;它所带来的面向对象程序设计观念与方法,使我们能够站在一群优秀工程师(MFC 或 OWL 的创造者)的努力心血上,继承其成果而开发自己之所需。同时,因为 Application Framework 特殊的工作类型,整体开发工具更容易制作,也制作的更完美。在我们决定使用 Application Framework 的同时,我们也获得了这些整合性软件开发环境的支持。在软件开发过程中,这些开发工具角色之重要性不亚于 Application Framework 本身。
Application Framework 将成为软件技术中最重要的一环。如果你不知道它是什么,赶快学习它;如果你还没有使用它,赶快开始用。机会之窗不会永远为你打开,在你的竞争者把它关闭之前赶快进入!如果你认为改朝换代还早得很,请注意两件事情。第一,江山什么时候变色可谁也料不准,当你埋首工作时,外面的世界进步尤其飞快;第二,面向对象和Application Framework可不是那么容易学的,花多少时间才能登堂入室可还得凭各人资质和基础呢。
浩瀚无涯的 Windows API

作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。
相关文章:
为什么要使用微软的 Application Framework?
我是荔园微风,作为一名在IT界整整25年的老兵,今天来看一下我们为什么要使用微软的 Application Framework? 虽然Application Framework 并不是新观念,它们却在最近数年才成为 PC 平台上软件开发的主流工具。面向对象语言是具体实…...
Python爬虫基础知识点
Python爬虫是使用Python编写的程序,可以自动抓取互联网上的数据。常用的Python爬虫框架包括Scrapy、BeautifulSoup、Requests等。Python爬虫可以应用于众多场合,如大数据分析、信息监测、数据挖掘和机器学习等领域。那么新手应该如何学习python爬虫呢&am…...
K8s运维备忘
1.服务器集群搭建: VagrantFile中加入以下代码,创建3个虚拟机: Vagrant.configure("2") do |config| (1..3).each do |i| config.vm.define "k8s-node#{i}" do |node| # 设置虚拟机的Box …...
激光雷达+rtk+rgb联合使用(4)
因为一直在忙一些乱七八糟的事情,就没顾得上继续写,想着快速收尾算了。 前面写到,我在点云的匹配上花了大量的时间,不断的调参数,换方法,一共几百个点云,想着先每50个匹配一次,得到几…...
【K8S系列】快速初始化⼀个最⼩集群
序言 走得最慢的人,只要不丧失目标,也比漫无目的地徘徊的人走得快。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记一级重要蓝色:用来标记二级重要 希望这篇文章能让你不仅有…...
Exploit/CVE-2010-0738
打开JBoss的潘多拉魔盒:JBoss高危漏洞分析 *本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。 前言 JBoss是一个基于J2EE的开放源代码应用服务器࿰…...
Go单元测试及框架使用
Go自带测试框架 单元测试 建议Go 语言推荐测试文件和源代码文件放在一块,测试文件以 _test.go 结尾。函数名必须以 Test 开头,后面一般跟待测试的函数名参数为 t *testing.T 简单测试用例定义如下: func TestXXXX(t *testing.T) {// ...}…...
TreeMap类型实体类数据进行排序
实体类Student类代码如下所示: package com.test.Test11;public class Student implements Comparable<Student>{private int age;private String name;private Double height;public int getAge() {return age;}public void setAge(int age) {this.age age…...
HOOPS助力AVEVA数字化转型:支持多种3D模型格式转换!
行业: 电力和公用事业、化工、造船、能源、采矿业 挑战: 创建大规模复杂资产的客户需要汇集多种类型的数据,以支持初始设计和创建强大的数字双胞胎;现有版本的产品只支持半打CAD格式;有限的内部开发资源限制了增加对新…...
(转载)基于遗传模拟退火的聚类算法(matlab实现)
1 理论基础 1.1 模糊聚类分析 模糊聚类是目前知识发现以及模式识别等诸多领域中的重要研究分支之一。随着研究范围的拓展,不管是科学研究还是实际应用,都对聚类的结果从多方面提出了更高的要求。模糊C-均值聚类(FCM)是目前比较流行的一种聚类方法。该…...
【C++】struct 和 class 的区别
欢迎来到博主 Apeiron 的博客,祝您旅程愉快。时止则止,时行则行。动静不失其时,其道光明。 目录 1、缘起 2、示例代码 3、总结 1、缘起 在 C 中,struct 和 class 唯一的区别就在于 默认的访问权限不同。区别如下: …...
活动笔记丨物业行业人效提升与灵活用工新路径
近日,盖雅工场成功举办物业行业人效提升专场交流,来自广深地区央企和民营的领先物业企业和现场服务业的多位代表齐聚深圳招商积余大厦,共同研讨行业人效提升的挑战和实践。 本次闭门交流会聚焦于人效提升,讨论话题包括各自企业在人…...
学习笔记:吴恩达ChatGPT提示工程
以下为个人笔记,原课程网址Short Courses | Learn Generative AI from DeepLearning.AI 01 Introduction 1.1 基础LLM 输入 从前有一只独角兽,输出 它和其他独角兽朋友一起住在森林里输入 法国的首都在哪?输出 法国的首都在哪…...
POI in Action
POI 组件依赖 按需引入对应依赖 (给出官方的指引) 组件作用Maven依赖POIFSOLE2 FilesystempoiHPSFOLE2 Property SetspoiHSSFExcel XLSpoiHSLFPowerPoint PPTpoi-scratchpadHWPFWord DOCpoi-scratchpadHDGFVisio VSDpoi-scratchpadHPBFPublisher PUBpoi-scratchpadHSMFOutloo…...
苹果Vision Pro将引爆人机交互的重大变革
2023年6月6日,苹果发布了大家期待已久的Vision Pro,Vision Pro是一款专业级MR设备,融合了虚拟现实(VR)和增强现实(AR)技术,可以让用户完全沉浸在高分辨率显示内容中。允许用户以一种全新的方式在其周围的空间中查看APP。用户可以用…...
MMDetection学习记录(二)之配置文件
文件结构 config文件 在 config_base_ 文件夹下有 4 个基本组件类型,分别是:数据集(dataset),模型(model),训练策略(schedule)和运行时的默认设置(default runtime)。 命名风格 {model}_[model setting]_{backbone}_{neck}_[no…...
Python数据分析:NumPy、Pandas和Matplotlib的使用和实践
在现代数据分析领域中,Python已成为最受欢迎的编程语言之一。Python通过庞大的社区和出色的库支持,成为了数据科学家和分析师的首选语言。在Python的库中,NumPy、Pandas和Matplotlib是三个最为重要的库,它们分别用于处理数值数组、…...
实习生面试问题及回答记录
文章目录 文章简介技术类1、DFS和BFS算法的区别是什么?2、解释一下什么是快速排序?3、 如果让你写一个排序算法?你会怎么写?(大概说出代码的思路)4、解释一下二分查找的具体逻辑?5、在代码的数据…...
设计模式(十):结构型之外观模式
设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式…...
买法拍房需要注意什么
法拍房,由于其价格亲民、房屋信息透明度高、竞拍过程公平公正而受到越来越多的人开始关注。但是其中又有着许多的风险及相关的注意事项。那么,如何做到成功“捡漏”,买法拍房需要注意什么呢? 买法拍房需要注意什么 1、隐藏的各种收费 税费&a…...
从希腊字母到优化问题:用Overleaf搞定LaTeX数学公式的20个高阶技巧
从希腊字母到优化问题:用Overleaf搞定LaTeX数学公式的20个高阶技巧 数学公式排版是LaTeX最强大的功能之一,但对于需要处理复杂数学内容的研究者和工程师来说,仅掌握基础语法远远不够。本文将分享20个经过实战验证的高阶技巧,帮助你…...
提升Blender渲染效率:立方盒反射烘培与材质优化指南
提升Blender渲染效率:立方盒反射烘培与材质优化指南 在3D创作领域,渲染效率与质量始终是设计师面临的核心挑战。Blender作为开源三维软件的代表,其渲染引擎的灵活性与强大功能为艺术家提供了无限可能,但同时也对硬件资源提出了较高…...
避坑指南:在RV1103B上为SC132GS摄像头添加设备树节点的正确姿势
RV1103B平台SC132GS摄像头设备树配置实战指南 1. 瑞芯微RV1103B平台摄像头开发概述 在嵌入式视觉系统开发中,瑞芯微RV1103B凭借其出色的图像处理能力和低功耗特性,成为工业视觉、智能门铃等场景的热门选择。SC132GS作为一款高性价比的1/3英寸CMOS传感器&…...
别再一上来就搞ETL了!聊聊我们团队在数据治理项目里踩过的第一个坑:数据资产划分
数据治理第一步:为什么跳过资产划分会让你的ETL工程翻车? 凌晨三点的办公室,咖啡杯已经见底,ETL管道却因为数据源混乱再次报错——这是许多数据团队的真实噩梦。我们团队在去年启动企业级数据治理项目时,也曾陷入"…...
HPE DL380 Gen10安装RedHat 7.9全流程:从VROC驱动配置到系统引导避坑指南
HPE DL380 Gen10企业级部署实战:RedHat 7.9与VROC驱动深度适配指南 在企业级IT基础设施中,HPE ProLiant DL380 Gen10服务器以其卓越的可靠性和扩展性成为关键业务负载的首选平台。当这类高性能硬件遇上RedHat Enterprise Linux 7.9这一经典企业级操作系统…...
Python办公自动化:用PyMuPDF+pdfplumber一键提取PDF文字/图片/表格(附完整代码)
Python办公自动化实战:PyMuPDF与pdfplumber高效提取PDF三要素 每天面对堆积如山的PDF文档,行政和财务人员最头疼的莫过于手动复制粘贴文字、截图保存图片、重新绘制表格。我曾见过一位财务同事为了处理200份供应商报价单,连续加班一周手工录入…...
UML(Unified Modeling Language,统一建模语言)是一种标准化的可视化建模语言,广泛用于软件系统的需求分析
UML(Unified Modeling Language,统一建模语言)是一种标准化的可视化建模语言,广泛用于软件系统的需求分析、设计与文档化。你列出的是UML 2.x 中最常用的六种结构与行为图,分别属于两大类: ✅ 结构图&#…...
5步解锁d2s-editor:暗黑2玩家的单机存档定制工具
5步解锁d2s-editor:暗黑2玩家的单机存档定制工具 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款基于Vue.js构建的暗黑破坏神2存档编辑工具,专为单机玩家设计,提供角色属性修…...
避坑指南:在华为云上为Python老项目配置代码检查与自动化构建(以Flask应用为例)
避坑指南:在华为云上为Python老项目配置代码检查与自动化构建(以Flask应用为例) 当我们需要将一个遗留的Python项目迁移到现代化开发流程时,往往会遇到各种"历史包袱"。本文将以一个从Python 2.7升级到3.7的Flask应用为…...
新手入门实战:基于 Spring Boot 的计算机毕设题目推荐管理系统设计与实现
对于计算机专业的同学来说,毕业设计(毕设)是大学学习成果的一次重要检验。然而,选题环节往往令人头疼:题目来源分散、重复率高、与个人兴趣或能力不匹配,缺乏一个集中的平台进行管理和推荐。今天࿰…...
