• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 3, 文章 - 0, 評論 - 16, 引用 - 0
            數據加載中……
            re: 簡單說兩句IoC和狗皮膏藥 kjin101 2008-04-01 10:00
            策略模式當然可以用IoC實現,我原貼里說的很清楚。但這只是策略模式一個側面(解析策略object)的一種具體實現方式而已。策略模式完全可以用非IoC方式(比如directory lookup,singleton factory等等)來達到相同的實質目的(將算法或策略分解為獨立object)。如果僅僅因為某一側面的眾多可能實現中的一種特定實現正好用到了IoC就將策略模式說成是IoC,那硬把馮諾伊曼架構和集成電路說成是一回事也不為過。

            另一方面,IoC也可以被用來搭接很多以其它非策略模式分解的的應用。比如,IoC可以用來實現事件發生器和事件觀測器的搭接,Object適配器的搭接,等等。如果IoC等同于策略模式,那么以同樣的理由,IoC也等同于發布訂閱模式,等同于適配器模式,等同于等等等等其他更多設計模式。。。最后硬把策略模式,IoC,以及發布訂閱,適配器,等等等等通通混為一談。。。是否也同樣不為過呢?
            > 不是很理解dynamic invocation proxies的意思,但pxgenproxy –h=foo.h > setup.xml這個命令行里的foo.h是必須的嗎?

            指定foo.h對pxgenproxy不是必須的,但對編譯生成后的代碼是必須的。-h=foo.h的目的只不過是讓pxgenproxy將#include "foo.h"加入到生成代碼中而已。

            > 是必須的話那就離不開源代碼了,至少是離不開頭文件的。
            > 這對于動態裝載進來的、無法預知源代碼或頭文件的程序來說,
            > 譬如說那些允許裝載第三方插件的場合,就不太適用了。

            foo.h只是頭文件,不是源代碼。這里,我們所真正要求的是提供class和函數的類型和簽名聲明。除了debug或腳本程序環境等少數特殊工具以外,絕大多數C++(甚至在ANSI-C)實際應用中并不存在要調用一個第三方class或函數而不知道函數的簽名或class的聲明的情況。我E文BLOG上討論的就是這個問題。最重要的一點就是:IOC的實質目的并不是提供一個腳本環境,而是組件架構。你的目的若是需要調用C++庫的腳本環境,請不要考慮POCOCAPSULE。

            > 但是reflection卻可以使用在這種場合。譬如說在一個 dll/so里,
            > 裝載進來時將reflection信息(class的名字、屬性和方法)注冊進某個
            > factory之類的東西里,然后ioc container就能用class名字在factory
            > 里找出并構造出那個class的實例,這個過程不需要頭文件和pxgenproxy
            > 這樣的步驟。

            關于reflection的陳述我完全同意。但IoC的實質目的(至少對于PocoCapsule IoC框架來說)與reflection并不相同。IoC完全不必照搬其他基于天然reflection機制的IoC框架實現。達到實質目的是最根本的。在我的E文BLOG文中比較了用reflection的缺點。。。。對絕大多數C++應用來說,reflection機制往往是有害的(主要是增加內存占用和限制開發方式。。。比如禁止了模板和宏的應用)

            > vcf的reflection并不需要修改頭文件,它要求加的那些宏是用來聲明reflect
            > 信息的,完全可以和class分隔開放在別的地方的,你對它的誤解我想可能
            > 是因為它的例子里把那些宏寫在了class定義里頭。

            謝謝指正。但需要人肉寫內些宏已經與使用IoC減少非業務邏輯代碼的編寫的除衷相矛盾了。

            > 老實說,可能是受java的影響比較大,我自己并不喜歡pxgenproxy
            > 這類帶點源代碼生成味道的東西,因為它會強迫你必須取得部分源代碼,
            > 這不適用于動態的開放的基于二進制層次的構件復用的環境。

            pxgenproxy根本不需要任何源代碼,也根本不會對使用第三方二進制模塊造成任何障礙。pococapsule實例代碼(見<http://www.pocomatic.com/docs/cpp-examples)中有很多這些例子。。。比如調用stdio中的printf(),調用iostream中的std::cout<<() operator,調用第三方CORBA或SOAP引擎函數等等。。。。

            > 但是,像vcf這類的reflection其實還是依賴于源代碼,
            > 做得還是不徹底,因為c++編譯后沒有 meta data了。
            > 可是c++ 0x不在乎這個,那我們也沒轍。

            IoC框架的目的不是為了提供debug或腳本環境,而是為了將管線邏輯分離并轉移至框架內,并將讓框架基于用戶提供的聲明式描述來完成管線搭接和應用的部署配置。對于此目的,reflection并不是必須的。相反,在C++中加入reflection將不可避免地增大內存開銷,這對很多C++應用來說是致命的。所以,即使以后的C++升級加上了對reflection的支持(甚至CERN現在就有一個。。。請艘SEAL Reflex),PocoCapsule C++也不會考慮使用(同樣的道理,PocoCapsule完全避免使用exception, template, rtti, stl, iostream等等機制和庫,就是要盡量減少內存開銷)。當然,PocoCapsule不會去禁止業務邏輯模塊去使用這些機制或庫。

            多謝討論!
            是javaeye的suntoe嗎?也是牛人呀。。。以后我可以多同你探討和請教了。個人感覺VCF里的reflection太業余了,居然要求人肉修改poco的頭文件。。。與非侵入思想背道而馳。IoC需要reflect才能實現才真正有用,這種認識完全是個誤區。。。迷惑了很多人。。。事實上恰恰相反。。。在C++中如果真用reflection(比如CERN的Reflex)來實現IoC,所帶來的問題反而比不用reflection多。我E文博客上探討了一下這個問題(<http://ke-jin.blogspot.com/2008/02/dynamic-invocation-proxy-in-pococapsule.html>)。不過國內有可能上不了內個網,過幾天我會把該文轉到PocoCapsule的wiki上。。。。我說話也是邏輯亂跳。。。估計編程的都這德行。。。;)
            >> 引用沒有 const,指針有 const;

            引用可以有const。
            多謝捧場。。。這篇東西在別的地方曾經被幾個老大斥責為很黃很暴力。。。嘿嘿。。。
            国产亚洲精久久久久久无码AV| 久久婷婷五月综合色99啪ak| 亚洲欧美一级久久精品| 91精品国产高清久久久久久io | 国产91久久精品一区二区| 日本强好片久久久久久AAA| A狠狠久久蜜臀婷色中文网| 国产三级观看久久| 久久久久无码精品国产不卡| 成人a毛片久久免费播放| 色婷婷久久久SWAG精品| 久久精品亚洲中文字幕无码麻豆| 国产成人无码精品久久久久免费| 亚洲精品国产第一综合99久久| 久久99热精品| 欧美黑人激情性久久| Xx性欧美肥妇精品久久久久久 | 人妻无码久久一区二区三区免费| 91精品国产91久久久久久蜜臀| 国产精品久久婷婷六月丁香| 国产精品热久久毛片| 91久久婷婷国产综合精品青草| 亚洲日本va午夜中文字幕久久 | 色综合久久无码中文字幕| 久久99精品久久久久久齐齐| av午夜福利一片免费看久久| 久久精品人人做人人爽电影 | 久久亚洲sm情趣捆绑调教| 色综合色天天久久婷婷基地| 久久99精品久久久久婷婷| 理论片午午伦夜理片久久| 国内精品伊人久久久久影院对白| 7777久久亚洲中文字幕| 亚洲欧洲日产国码无码久久99| 亚洲а∨天堂久久精品9966| 久久久久久国产精品无码下载| 国产精品亚洲综合专区片高清久久久 | 色综合久久久久无码专区| 久久久久亚洲精品日久生情| 欧美久久一级内射wwwwww.| 欧美精品一区二区久久|