重读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)有感的更多相关文章

  1. 【Sql server: T-Sql 技术内幕 系列】之索引篇

    本文系 T-Sql技术内幕系列读后感. 用过数据库的程序猿都知道,索引可以极大的优化sql语句的执行时间,但是您要问我,怎么减少的,我只能说:"抱歉,我也不太清楚." 带着这个疑惑 ...

  2. 【转】COM技术内幕(笔记)

    COM技术内幕(笔记) COM--到底是什么?--COM标准的要点介绍,它被设计用来解决什么问题?基本元素的定义--COM术语以及这些术语的含义.使用和处理COM对象--如何创建.使用和销毁COM对象 ...

  3. 《[MySQL技术内幕:SQL编程》读书笔记

    <[MySQL技术内幕:SQL编程>读书笔记 2019年3月31日23:12:11 严禁转载!!! <MySQL技术内幕:SQL编程>这本书是我比较喜欢的一位国内作者姜承尧, ...

  4. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  5. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...

  6. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...

  7. Mysql技术内幕(第四版)读书笔记(一)

    题记:写代码已经有2年了,学到了很多知识,但是没有一个好习惯去记录,去分享,好多知识点都会忘记,所以从今天开始学着像大牛一样去记录自己经历项目的点点滴滴,先从最近读<Mysql技术内幕>开 ...

  8. 深入分析Java Web技术内幕(修订版)

    阿里巴巴集团技术丛书 深入分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书.技术大牛范禹.玉伯.毕玄联合力荐!大型互联网公司开发应用实践!) 许令波 著   ISBN 978-7-121- ...

  9. WebKit技术内幕

    WebKit技术内幕(浏览器内核|渲染引擎| HTML5| Chromium项目Committer重磅作品) 朱永盛 著   ISBN 978-7-121-22964-0 2014年6月出版 定价:7 ...

随机推荐

  1. [USACO17FEB]Why Did the Cow Cross the Road II S

    题目描述 The long road through Farmer John's farm has  crosswalks across it, conveniently numbered  (). ...

  2. [BZOJ]1089 严格n元树(SCOI2003)

    十几年前的题啊……果然还处于高精度遍地走的年代.不过通过这道题,小C想mark一下n叉树计数的做法. Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该 ...

  3. UESTC 618 无平方因子数 ( 莫比乌斯)

    UESTC 618 题意:求1到n中无平方因子数的个数 Sample Input 3  1  10  30 Sample Output 1  7  19 思路:与前面的BZOJ 2440相似 #inc ...

  4. hdu3966 点权模板-树链部分

    Aragorn's Story Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. hdu5601 BestCoder Round #67 (div.2)

    N*M bulbs  Accepts: 94  Submissions: 717  Time Limit: 10000/5000 MS (Java/Others)  Memory Limit: 655 ...

  6. hdu 1130 How Many Trees?(Catalan数)

    How Many Trees? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. NOIP2016 玩脱记

    NOIP前: NOIP前停课了一个多月,这一个多月里浪得飞起,内心十分紧张,然后就不知不觉就到NOIP了. Day 0: 上火车前ryc给我们出了道题"一个数列,只有两个数出现了奇数次,找出 ...

  8. C语言中如何调用另一个源文件里的函数

    在开发大型项目时,我们常常需要将一份源码分成多个源文件来进行编写,这样可以方便后期的维护.下面就介绍如何从一个源文件里调用另一个源文件的函数. 在源文件A1.c中调用A2.c 中的函数有两种方法: 1 ...

  9. 详解linux进程间通信-管道 popen函数 dup2函数

    前言:进程之间交换信息的唯一方法是经由f o r k或e x e c传送打开文件,或通过文件系统.本章将说明进程之间相互通信的其他技术-I P C(InterProcess Communication ...

  10. 一看你就懂,超详细java中的ClassLoader详解

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 ClassLoader翻译过来就是类加载器,普通的Java开发者其实用到的不多,但对于某些框架开发者来说却非常常见.理解ClassL ...