重读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 ...
随机推荐
- bzoj 4006: [JLOI2015]管道连接
Description 小铭铭最近进入了某情报部门,该部门正在被如何建立安全的通道连接困扰. 该部门有 n 个情报站,用 1 到 n 的整数编号.给出 m 对情报站 ui;vi 和费用 wi,表示情 ...
- hdu 5505(GT and numbers)
题意: 给你a和b,a每次和它的因子相乘得到一个新的a,求多少次后可以得到b. 输入样例 3 1 1 1 2 2 4 输出样例 0 -1 1 思路: 每次找出a和b/a的最大公约数(即当前a想得到b能 ...
- 【集训第二天·翻水的老师】--ac自动机+splay树
今天是第二天集训.(其实已经是第三天了,只是昨天并没有机会来写总结,现在补上) 上午大家心情都很愉快,因为老师讲了splay树和ac自动机. 但到了下午,我们的教练竟然跑出去耍了(excuse me? ...
- AD域中添加了一个策略导致的问题
AD域中添加了一个策略,导致浏览器报了一个错,点击下拉菜单选不了.查了资料说是添加信任站点就好,结果信任站点是置灰的,服务器有这个问题,本地是好的. 解决办法:本地服务器有个ie增强设置,关掉就好.
- Python中模块之xml的讲解
xml模块的功能介绍 这里主要讲解xml模块下的etree.ElementTree类. 1. 创建 具体代码如下 import xml.etree.ElementTree as XM namelist ...
- Windows Server 2008 R2服务器系统安全设置参考指南
Server 2008 R2服务器系统安全设置参考指南 重点比较重要的几部 1.更改默认administrator用户名,复杂密码 2.开启防火墙 3.安装杀毒软件 1)新做系统一定要先打上补丁(升 ...
- c# error
部署iis c# 连sqlserver 用IIS发布之后,网页出错.提示为:异常详细信息: System.Data.SqlClient.SqlException: 用户 'NT AUTHORITY\I ...
- java new 关键字到底做了什么?
一.关键字new概述 "new"可以说是Java开发者最常用的关键字,我们使用new创建对象,使用new并通过类加载器来实例化任何我们需要的东西,但你是否深入了解过new在编译的瞬 ...
- axios的兼容性处理
一.简介 看看官网的简介: "Promise based HTTP client for the browser and node.js" 译:基于 Promise 的 HTTP ...
- 75. Sort Colors(中等)
Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...