<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    2008年2月26日

    一點感悟

    這兩天遇到的一些問題,引起的一些思考,覺得有必要寫下來。
    一. 面向對象的API接口設計,如何做到向后兼容。一個軟件存在多個模塊,如果提供基礎API的模塊變化了,那么依賴于它的應用模塊都必須重新編譯和部署。這就對基礎API模塊的向后兼容性提出了要求。完全通用的方法是不存在的,任何方法都需要根據實際情況調整,這里僅僅提供一些比較通用但是也不明確的方法:
    方法一:擴展時對象只增加方法和屬性,原有的屬性和方法保留。這對于c++等基于二進制對象布局的方法在使用時需要非常小心,否則極易引起內存訪問違規。但是對于ActionScript基于元數據的語言來說,這一方法一般不會有什么問題。對于Java的情況不是非常清楚,估計與actionscript情況差不多。
    方法二:增加新的對象(使用繼承)提供擴展功能,原來的對象保留。不過對于耦合的類關系,只增加一個類往往并不能達到目的。

    這里必須注意的一點是,API提供者與API使用者保持單向依賴的關系,API不應該依賴于具體的應用。對于多模塊的軟件來說架構最重要的是兩點:
    1. 從需求中抽象出API,并且將API的開發交給素質較高的人員,而應用之間松散耦合,通過API發生關系。
    2. API本身空間也要做劃分,將之切割成為正交的空間,這樣API擴展時,影響控制在局部。


    順便說說向前兼容的問題,這要求新的Client兼容老的API,這在API設計中很少碰到,但是在設計軟件的文檔存儲格式(Save/Load)時常常遇到,這要求新的應用在開發時,做判斷,判斷屬性不存在時應該如何處理,也就是提供一個默認值。

    對于其它的Server-Client結構,比如WebService的擴展,XML擴展等等,我想也應該有類似的方法。所以我也想去看看一些公開的API接口是如何設計和擴展的,比如FaceBook,不過說到底還是抽象與空間劃分的問題,而這些并沒有通用的方法,都依賴于具體的需求。

    二. 面向接口的設計實際上就是合理的劃分對象空間。對于對象在擴展時,我們常常會發現并沒有辦法把它劃分成樹狀的類關系,常常我們發現從一個類A派生了兩個類B和C,但是又存在第三種情況,它的行為包含部分B的行為也包含部分C的行為。實際上類的空間劃分,和數據庫設計是一樣的,每一次劃分(繼承)相當于以一個索引劃分對象空間,但是很多時候劃分有多個索引,這時候要想劃分成單一的一棵樹是不可能的。這時候就需要進一步細化對象的空間劃分,并將之劃分為正交的多個空間。舉個例子:Window派生出TransparentWindow和OpaqueWindow,這是一種劃分,但是我們又發現另一種劃分,WindowWithTitleBar與WindowWithoutTitleBar,他們都是對Window的劃分。這時候我們應該想到的是,Window可以拆分為:ITitleBar, IMainWindow,各種Window可以選擇實現或者不實現這些接口。當第三者使用這些對象時,直接訪問接口即可,因為其它的接口可能是他們并不關心的。當存在多種索引時,將對象拆分為正交的空間,每一個空間尤其自己的單一索引,這應該是對象劃分的一種通用原則。就像單根繼承一樣,這樣會使得對象的劃分結構非常清晰。
    對于某些不是特別復雜的情況,如果存在多種劃分索引,不妨用單一的類表示全部的對象,對某些對象,某些屬性方法是無效的,這樣實際上在簡單情況下是很有效的,因為過度的劃分會造成復雜性,使用者可能不知道在哪個對象上找到他需要的屬性或方法了,這就好像在一張表上設計了全部的屬性,盡管有些屬性是抵觸的,有些屬性是相關的。隨著不斷的擴展,這張表會越來越大,這就需要開始對對象空間做劃分了,所以說到底,還是一個需求復雜度的問題,這里最重要的是掌握一個劃分的度,何時劃分,劃分到什么程度,決定這些的往往不僅僅是技術因素,還有商業上,運營上,時間上,成本上的因素,這也是最難判斷的一點,需要在實際中去具體問題具體分析,這里就能體現經驗的重要性了,其實在架構上方法都是很Genralized的,這些和實現一個具體的算法大部相同,所以設計模式都在講模式一定有其上下文,也是這個道理嗎

    胡扯了很多,先到這里吧,等有時間做進一步的整理

    posted @ 2008-08-15 17:40 雁過無痕 閱讀(323) | 評論 (0)編輯 收藏

    國內的Flex資源

    AnyFlex
    RIAchina
    RXNA類似國外的mxna)
    Flex搜索引擎計劃:http://blog.eshangrao.com/index.php/2007/02/27/352-googleflex
    Flex Wiki計劃:http://blog.eshangrao.com/index.php/2007/05/12/390-flexwikiflex
    RIAmeeting:http://www.riameeting.cn/

    Flex對于信息發布類網站不一定有效,但交互性要求很高的社區類網站就很合適

    posted @ 2008-02-28 16:12 雁過無痕 閱讀(370) | 評論 (0)編輯 收藏

    竹林深處寬屏壁紙

    http://www.aar.cn/wallpaper/Desktop/Natural/2150/F_WQTP_1680x1050_Q.Html

    posted @ 2008-02-27 18:45 雁過無痕 閱讀(362) | 評論 (0)編輯 收藏

    Flex SDK Open Source Site Online

    http://opensource.adobe.com/wiki/display/site/Source

    posted @ 2008-02-26 11:38 雁過無痕 閱讀(303) | 評論 (0)編輯 收藏

    <2008年2月>
    272829303112
    3456789
    10111213141516
    17181920212223
    2425262728291
    2345678

    導航

    統計

    常用鏈接

    留言簿(7)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品天堂在线观看| 亚洲AV无码AV男人的天堂| 亚洲中文字幕日本无线码| 免费能直接在线观看黄的视频| 亚洲AV电影院在线观看| 99精品免费视频| 亚洲国产一区国产亚洲| 97在线视频免费公开观看| 911精品国产亚洲日本美国韩国| 亚洲视频在线观看免费| 自怕偷自怕亚洲精品| 18观看免费永久视频| 亚洲Av高清一区二区三区| 免费看无码自慰一区二区| 激情无码亚洲一区二区三区| 四虎影视在线永久免费看黄| 午夜免费国产体验区免费的| 亚洲精品无码精品mV在线观看| 免费看搞黄视频网站| 亚洲欧洲日产国产最新| 女人18毛片水真多免费看| 免费人成视频在线播放| 亚洲香蕉网久久综合影视| 美女内射无套日韩免费播放 | 2022国内精品免费福利视频| 国产亚洲精品无码专区| 99精品视频在线免费观看| 亚洲最大中文字幕无码网站| 免费v片在线观看无遮挡| 在线观看黄片免费入口不卡| 亚洲精品亚洲人成在线麻豆| 午夜成年女人毛片免费观看| 免费人成又黄又爽的视频在线电影| 亚洲日韩一页精品发布| 69xx免费观看视频| 免费看一级一级人妻片| 一区二区三区亚洲| 免费A级毛片在线播放不收费| 男人进去女人爽免费视频国产| 亚洲中文字幕无码亚洲成A人片| 亚洲综合区小说区激情区|