WebKit 源代码评析一

 

WebKit 源代码评析一

 

作为过去两年最受热捧的浏览器引擎 WebKit,可谓风光无限好!

 

本人抱着学习的态度,埋头研读,斩获颇多。但也发现一些细节上的小疑问!

 

比如下面这段代码

 

    class EventTarget {
    public:
        void ref() { refEventTarget(); }
        void deref() { derefEventTarget(); }

        virtual EventSource* toEventSource();
        virtual MessagePort* toMessagePort();
        virtual Node* toNode();
        virtual DOMWindow* toDOMWindow();
        virtual XMLHttpRequest* toXMLHttpRequest();
        virtual XMLHttpRequestUpload* toXMLHttpRequestUpload();

    ...

 

    EventTarget 表示DOM模型中Event宿主对象,封装了事件触发等行为逻辑。

   

    DOM Node 从 EventTarget 派生,从而继承了相关的事件行为特性。可以

认为,EventTarget 本是一个完全不依赖于 DOM Node 的独立体系。但是,

上面代码中,却出现了一组 toXXXXX()的类型转换函数。这是典型的从上向下的

类型识别操作,现在,EventTarget  和 Node 相互依赖了。 

 

    通过虚函数来提供类型识别,我个人是不太赞成的,因为它加强了基类与派生类型

的耦合,不利于代码维护,每增加一个派生类型,基类型就需要增加一个转换函数。

     更不好的是,不利于代码阅读。第一次看到这些代码,大概都会犯疑惑,

EventTarget 为什么要依赖如此多的类型?

     最后,从代码复用的角度,假设需要在一个新的环境中使用EventTarget 类型,

首先就要去掉上面那么一堆的类型转换函数。

 

     当然,WebKit这样的实现,从功能上说也没什么不好,或许我的观点太苛刻了,

太学究了。有句话,“好软件都是用烂代码写出来的”,不知道WebKit算不算,哈哈!

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值