主题:随便说说c++的这次吵架 -- 透明
我其实是想说VC++5.0。我是觉得说MFC 5.0的时候有点别扭。
Visual Studio, C++编译器, COM的版本一直不一致。
MFC一开始是想做一Windows下的应用程序框架,所以一开始命名很多Afx的宏和类名。Stephen(就是那个把鲍尔默从Vista拯救出来,领导Win 7, 后来有功高震主被开的那个) 回忆说,他们一开始一直想着是怎么把 C++ 的所有特性功能都用上(那时C++还是很fancy,很酷,也没标准化)。直到项目一再延期,他们才认识到他们是在开发一个产品而不是展现语言功能。
MFC在OOP封装上是很失败的,可以说完全没有封装好,处处漏风,类之间的耦合很紧,到处是内部实现的泄露,导致一不小心就GDI资源或者内存泄漏。基本上徒有OOP的外表而没有实质。我猜C++内存泄漏的名声很大部分是MFC的功劳。估计很大一部分人第一次听说内存泄漏都是写MFC程序的时候。
MFC目标是一个应用程序框架,实际上因为功能不完整,也半途而废,最终基本是一个GUI框架。比如你说的消息传递机制,实际上只在写GUI窗口的时候用上。
而就它的实际作为GUI功能而言, WTL的设计要好的多,封装上有一致性,拥不拥有资源从命名上很清楚,实现简单,十来个header文件。google chrome 的 windows 版,大多数杀毒软件的界面,VMWare这些都是基于WTL。
匈牙利命名法错误在于把变量类型嵌入到变量命名,导致阅读困难,也难扩展(除了POD,类型缩写因人而异),而且重构也不变,把一个变量比如一开始用整型表示一个Id:int iId,后来重构到类ID后:ID iId会显得莫名其妙。
我们现在以穿越的形式,说它一无是处,不是因为吃饱了打厨子,是总结经验教训, MFC的毛病很大程度上是历史局限性,那时C++还没标准化,纯OOP的语言也没有(现在有了C#, .NET API的封装好多了)。
- 相关回复 上下关系8
压缩 3 层
🙂先学MFC真是灾难啊,还好爬出来了 5 敲门 字644 2019-01-27 00:05:18
🙂也不能这么说吧 3 starkik 字336 2019-09-21 00:28:51
🙂可以再请教一下么? 3 数值分析 字439 2019-01-25 23:21:43
🙂你说得对
🙂MFC上一大堆宏只能靠开发环境生成、维护 9 沉宝 字296 2019-10-19 11:52:59
🙂没错, Borland的工具很好,他基本上是被微软坑死的 2 透明 字271 2019-10-20 11:19:20
🙂老铁的机器人回来了 桥上 字0 2019-10-20 00:34:31
🙂你也变成新兵了?退步了啊。 夜如何其 字0 2019-10-19 12:13:54