重读COM技术内幕(inside com)有感
重读COM技术内幕(inside com)有感
面向对象设计哲学在复杂领域并不能很好地解决问题。参考(http://www.richardlord.net/blog/what-is-an-entity-framework)。因此引入了面向接口的设计。微软组件对象模型就是这种设计的实现。当然,COM的应用绝对不限于Microsoft,而COM的底层架构也由于实现过于复杂带来很多性能上的问题。但是COM的思想的确有伟大之处。
动态决定一个对象能调用哪些方法是现今软件领域配置即服务的根本要求。对象不能固化;对象实现的接口也不能固化;对象从配置文件中读取配置以动态实现接口。这样一来,对象就是泛化的实体(Entity),接口如果称为组件(Component),那么组合优于继承,就是这个意思了。Entity包含了不同的Component,这样Entity就形成不同类型的对象或服务。而处理对象的流程(Process,也有称System)就是根据一定规则调用Entity服务的过程。这样一来,一切都豁然开朗了。
让我们再梳理一下思路。软件就是服务,这没错。服务就是一些部分(Component)的组合。每个部分完成具体的功能调用。组合这些部分(Component)就形成具有有种特性的实体Entity。所有Entity都应该具备查询是否支持某个Component的方法,于是IUnknown接口被抽象出来,作为所有Component都支持的接口(Interface)。Interface就是方法集合,暴露Component的功能。Component正因为具备了不同的Interface,于是成为特定的组件。Component包含数据和逻辑,而Entity组合他们。
注册表毫无意义。组件系统本身不应该依赖第3方提供的清单来发现。注册表机制的最大缺陷成为它日后被广泛攻击的靶子,最后是Windows最脆弱的部分,衍生出巨大的灰色市场。微软当初的软件哲学是封闭的黑盒子调用,所有要通过注册表机制来发现服务。某个功能既然有人实现了,就可以放到一个中心化的地方备案,然后调用者可以放心使用。这个哲学最大的出发点就是封闭。COM的衰落也是由于封闭导致。其实调用别人写好的组件并不是真正意义上的重用,这种仅仅靠数字签名没有任何保证的调用,会带来巨大的隐患。软件在工程领域真正的重用必然需要源码开放。软件本身应该成为闭包,不应该依赖系统过分的参与(脚本宿主除外)。
既然COM其核心思想如此通用,COM本来应该就是跨平台的,但是由于历史的原因,长久以来COM及其类库被绑定在Windows平台上。当然,现在看来,其核心类库已然不足取,完全可以自己根据这个思想灵活对待具体问题。
今天,使用高级语言Java, C++等开发的,鲜有不是面向接口开发的。在Java里,可以很容易判断一个对象是否实现了某个接口,在C++里,需要提供一个公共方法。面向组件开发的最大有点就是可以动态配置接口,引入脚本支持,比如lua,实现热部署,热替换,仅仅配置就可以实现功能了。今天重读COM技术内幕,10多年前的心境油然而升,当年是啃了一年啃出来的一本书,现在看来是那么轻松。当然,如果你是个新手,这本书可以看,但不要局限在微软对象模型上,重点是理解其思想,自己实现一个平台无关版本就可以了。取其精华,去其糟粕。
重读COM技术内幕(inside com)有感的更多相关文章
- 【Sql server: T-Sql 技术内幕 系列】之索引篇
本文系 T-Sql技术内幕系列读后感. 用过数据库的程序猿都知道,索引可以极大的优化sql语句的执行时间,但是您要问我,怎么减少的,我只能说:"抱歉,我也不太清楚." 带着这个疑惑 ...
- 【转】COM技术内幕(笔记)
COM技术内幕(笔记) COM--到底是什么?--COM标准的要点介绍,它被设计用来解决什么问题?基本元素的定义--COM术语以及这些术语的含义.使用和处理COM对象--如何创建.使用和销毁COM对象 ...
- 《[MySQL技术内幕:SQL编程》读书笔记
<[MySQL技术内幕:SQL编程>读书笔记 2019年3月31日23:12:11 严禁转载!!! <MySQL技术内幕:SQL编程>这本书是我比较喜欢的一位国内作者姜承尧, ...
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...
- Mysql技术内幕(第四版)读书笔记(一)
题记:写代码已经有2年了,学到了很多知识,但是没有一个好习惯去记录,去分享,好多知识点都会忘记,所以从今天开始学着像大牛一样去记录自己经历项目的点点滴滴,先从最近读<Mysql技术内幕>开 ...
- 深入分析Java Web技术内幕(修订版)
阿里巴巴集团技术丛书 深入分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书.技术大牛范禹.玉伯.毕玄联合力荐!大型互联网公司开发应用实践!) 许令波 著 ISBN 978-7-121- ...
- WebKit技术内幕
WebKit技术内幕(浏览器内核|渲染引擎| HTML5| Chromium项目Committer重磅作品) 朱永盛 著 ISBN 978-7-121-22964-0 2014年6月出版 定价:7 ...
随机推荐
- [HNOI2014]世界树
题目描述 世界树是一棵无比巨大的树,它伸出的枝干构成了整个世界.在这里,生存着各种各样的种族和生灵,他们共同信奉着绝对公正公平的女神艾莉森,在他们的信条里,公平是使世界树能够生生不息.持续运转的根本基 ...
- ●洛谷P1083 借教室
题链: https://www.luogu.org/problemnew/show/P1083题解: 二分,差分 显然具有二分性: 如果只考虑1~p个人,就会在某一天无法满足, 那么显然只考虑1~[p ...
- bzoj2096[Poi2010]Pilots 单调队列
2096: [Poi2010]Pilots Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 983 Solved: 513[Submit][Statu ...
- Python的数据类型——字符串
一.字符串的误解 计算机系统的每个内存单元都是唯一并且连续的物理地址,字符串在内存中一旦创建就被 操作系统分配一块唯一并且连续的地址.计算机系统不允许我们修改字符串中的内容,一旦我想 试图进行修改,系 ...
- Linux中LCD设备驱动-framebuffer(帧缓冲)【】
转自:https://blog.csdn.net/linux_devices_driver/article/details/7079442 1.framebuffer 帧缓冲 帧缓冲(fram ...
- c语言第四次作业e
---恢复内容开始--- (一)改错题 输出三角形的面积和周长,输入三角形的三条边a.b.c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数):否则,输出"Th ...
- SynchronizedMap和ConcurrentHashMap的深入分析
http://blog.sina.com.cn/s/blog_5157093c0100hm3y.html java5中新增了ConcurrentMap接口和它的一个实现类ConcurrentHashM ...
- idea,mybatis读取配置文件报错:Could not find resource configuration.xml
在pom.xml中,把xml文件加入编译,成功解决问题. <build> <resources> <resource> <directory>src/m ...
- 64. Minimum Path Sum(中等, 又做出一个DP题, 你们非问我开不开心,当然开心喽!^^)
Given an m x n grid filled with nonnegative numbers, find a path from top left to bottom right which ...
- OpenCV设置摄像头分辨率及全屏显示
OpenCV3.0下 设置摄像头分辨率为1920*1440,并全屏显示图像窗口. int _tmain(int argc, _TCHAR* argv[]) { Mat frame; VideoCapt ...