posts - 80,comments - 749,trackbacks - 2
          這是一篇寫給初學(xué)者看的文章。在前一段時間的招聘軟件設(shè)計師的過程中,我對每一個看似初學(xué)者的人都會問這個問題,“您覺得平臺相關(guān)性和平臺無關(guān)性哪個更好 一些”,呵呵(偷笑),其實這是唬人的,多數(shù)回答者都會順著出題者假裝的思路回答“我個人認(rèn)為平臺無關(guān)性比較好”,可是只要有點軟件設(shè)計經(jīng)驗或是對這個問 題有所思考的人都知道其實這個問題不只兩個標(biāo)準(zhǔn)答案。

          關(guān)于平臺無關(guān)性,我不想說什么,說什么也沒用。大量軟件設(shè)計或軟件架構(gòu)以此來標(biāo)榜自己的優(yōu)秀和出眾,其實這沒什么,因為大部分平臺無關(guān)性的工作不是由你來 做的。如果你正在寫一個Java程序,并依照Sun的100% Pure Java的要求來做,那么應(yīng)該就是平臺無關(guān)的,如果你正在寫一個Eclipse應(yīng)用或直接用SWT/JFace組合來寫應(yīng)用程序,那么也是平臺無關(guān)的,如 果你喜歡C/C++,并在用wxWidget寫應(yīng)用程序,那么也是平臺無關(guān)的,如果你實在是很牛,在依照OSGi的規(guī)范寫代碼,那么ok,你的程序已經(jīng)可 以從微設(shè)備到大型機統(tǒng)統(tǒng)可以用。

          平臺無關(guān)也是一個相對的概念,在多個操作系統(tǒng)上運行可以稱為平臺無關(guān)的,以往在多個不同品種的CPU上運行可以稱為平臺無關(guān)性,還有一件搞笑的事情,某個 公司出了一套系統(tǒng),可以在Java和.NET兩個平臺上運行,但卻只能依賴于Windows系統(tǒng)(因而只能依賴于x86芯片),居然還可以稱平臺無關(guān)性, 可見這個概念有多么混亂。我個人評價是不是平臺無關(guān)的僅有一個標(biāo)準(zhǔn),那就是——你有沒有為平臺無關(guān)做出貢獻(xiàn)!如果你為了能在多個平臺上跑出你的代碼而做了 很多工作,那么你就可以稱自己為平臺無關(guān)的,而如果你僅僅依賴SWT工作,那就不能稱自己為平臺無關(guān)的。不過話又說回來,如果你把SWT包含在自己的軟件 中,并為此出了該軟件的多個版本(每個SWT的版本是一個發(fā)行包),那么你也可以稱此為平臺無關(guān)的,雖然這個貢獻(xiàn)并非出自你手。

          平臺無關(guān)也不見得總是個優(yōu)點,很多系統(tǒng)為了堅持平臺無關(guān)而犧牲了很多特性,或不必要的提高了成本。比如前幾年很多系統(tǒng)原意搞WEB界面,導(dǎo)致了很多易用性 方面的問題,Cooper說Web使人機交互技術(shù)倒退了10年,的確如此。我還讀過一段源碼,大概是一個單機版?zhèn)€人軟件的源碼,令人驚奇的是,該軟件很 小,卻把很多筆墨花在了業(yè)務(wù)對象和JDBC訪問層之間的一個“抽象數(shù)據(jù)存儲層”,理由是便于將來移至非JDBC平臺,天哪!會有多少用戶有機會使用不支持 JDBC的數(shù)據(jù)庫??!!這種設(shè)計和下面一種設(shè)計是一樣的效用:“為了讓這段代碼支持非OO語境,我決定整個軟件只用一個類!”。這種追求可以用四個字來 表述就是:“過渡設(shè)計”或者“吃飽撐著”!

          相反,這個世界上有80%的軟件是平臺相關(guān)的,這沒什么不能理解的。就像“民主和專制的TCO哪個高”這個問題的答案一樣,如果我現(xiàn)在要招聘的是部門經(jīng)理 或副總裁,我很可能會問這個問題。事實上是,在整個人類的發(fā)展歷程中,總成本最低(即總效率最高)的幾個“社會時期”,幾乎全是專制,但如果你不假思索,你的 答案一定是民主!當(dāng)然,平臺相關(guān)也是相對的概念。

          說到這里,有興趣的讀者可能會說結(jié)合二者是最好的選擇,我不喜歡這種說法,因為太辨證了,我喜歡的是首先考慮依賴于哪個框架,再找尋該框架的平臺無關(guān)性, 如果沒有必要,盡量不要為平臺無關(guān)(實際上是一種優(yōu)先級非常低的非功能性需求)做任何事情,但如果有必要且成本允許,再做少許考慮,最好還是能夠重用開源 世界的產(chǎn)品。

          仍以O(shè)SGi為例,這個例子很好,它對Java語言本身(還不是面向?qū)ο蟮墓舱Z義)非常依賴,直接依賴至VM的spec,當(dāng)然也寫了些代碼以避開 ClassLoader的個性,即使如此,OSGi事實上實現(xiàn)了從微設(shè)備到大型機全套支持,借助Java的平臺無關(guān)性,既沒有易用性、性能和成本方面的絲 毫損失,也為上層平臺提供了平臺無關(guān)的環(huán)境。同樣,為Mac OSX設(shè)計的很多非常優(yōu)秀的軟件都沒有考慮平臺無關(guān)的問題,而是用在PC上再做一套的方式來解決,這些都是值得思考和借鑒的解決方案。

          有點忙的泡泡
          (轉(zhuǎn)載本文需注明出處:Brian Sun @ 爬樹的泡泡[http://www.briansun.com])


          posted on 2005-11-17 09:19 Brian Sun 閱讀(6207) 評論(10)  編輯  收藏 所屬分類: 軟件隨心

          FeedBack:
          # re: 平臺相關(guān)性與平臺無關(guān)性
          2005-11-17 10:23 | weide
          某個公司出了一套系統(tǒng),可以在Java和.NET兩個平臺上運行,但卻只能依賴于Windows系統(tǒng)(因而只能依賴于x86芯片),居然還可以稱平臺無關(guān)性,可見這個概念有多么混亂。
          --------------------------
          有些不大理解:能夠運行在Java平臺上,怎么會只能依賴于Windows系統(tǒng)?


          我個人評價是不是平臺無關(guān)的僅有一個標(biāo)準(zhǔn),那就是——你有沒有為平臺無關(guān)做出貢獻(xiàn)!
          --------------------------
          這個也不認(rèn)同;不管有沒有做出貢獻(xiàn),只要“平臺無關(guān)”,那就是平臺無關(guān)吧?  回復(fù)  更多評論
            
          # re: 平臺相關(guān)性與平臺無關(guān)性
          2005-11-17 11:03 | 非魚
          某個公司出了一套系統(tǒng),可以在Java和.NET兩個平臺上運行,但卻只能依賴于Windows系統(tǒng)(因而只能依賴于x86芯片)

          --------

          如果只能依賴于x86芯片,應(yīng)該用在Linux上也可以吧?  回復(fù)  更多評論
            
          # re: 平臺相關(guān)性與平臺無關(guān)性
          2005-11-17 14:45 | s5s5
          編程好神奇啊,我有空要學(xué)一學(xué),嘿~  回復(fù)  更多評論
            
          # re: 平臺相關(guān)性與平臺無關(guān)性
          2005-11-17 15:28 | Brian Sun
          這個例子有些公司內(nèi)部的技術(shù)細(xì)節(jié)不便于透露,但是只能說為了遷就.NET的一些特征,該系統(tǒng)只能在Windows上運行。

          至于“平臺無關(guān)”,我已經(jīng)說過了它是相對的概念,你怎么描述你的產(chǎn)品是平臺無關(guān)的呢,“芯片無關(guān)”?“操作系統(tǒng)無關(guān)”?還是“運行平臺無關(guān)”?

          可能是我思路常常跳躍的緣故,也可能是很多瀏覽網(wǎng)頁或訂閱RSS的人只讀文章的一半的緣故,您沒能理解我的意思。  回復(fù)  更多評論
            
          # re: 平臺相關(guān)性與平臺無關(guān)性
          2005-11-17 17:25 | 非魚
          有些地方不明白:

          總成本(即總效率)。。。

          能否解釋一下?  回復(fù)  更多評論
            
          # re: 平臺相關(guān)性與平臺無關(guān)性
          2005-11-17 22:13 | Brian Sun
          對于一個社會而言,總成本和總效率是成反比的。通常作為一個指標(biāo)出現(xiàn),原文是筆誤了。

            回復(fù)  更多評論
            
          # re: 平臺相關(guān)性與平臺無關(guān)性
          2005-11-22 02:13 | weide
          仍以O(shè)SGi為例,這個例子很好,它對Java語言本身(還不是面向?qū)ο蟮墓舱Z義)非常依賴,直接依賴至VM的spec,當(dāng)然也寫了些代碼以避開 ClassLoader的個性,即使如此,OSGi事實上實現(xiàn)了從微設(shè)備到大型機全套支持,借助Java的平臺無關(guān)性,既沒有易用性、性能和成本方面的絲毫損失,也為上層平臺提供了平臺無關(guān)的環(huán)境。

          -------
          有這么神奇?
          希望看到對樓主對osgi的更多文章  回復(fù)  更多評論
            
          # re: 平臺相關(guān)性與平臺無關(guān)性
          2005-11-22 13:14 | Brian Sun
          weide,沒問題,呵呵,謝謝捧場!
            回復(fù)  更多評論
            
          # re: 平臺相關(guān)性與平臺無關(guān)性
          2005-11-28 11:33 | errorfun
          最近在做一些需求分析和系統(tǒng)分析的工作,也在考慮這個問題,看完后覺得自己也犯了這“過度設(shè)計”這個錯。想得太多了,現(xiàn)在一般公司不用WINDOWS的大概沒有那么多個。  回復(fù)  更多評論
            
          # re: 平臺相關(guān)性與平臺無關(guān)性
          2006-06-10 10:28 | sangern
          路過
          MARK  回復(fù)  更多評論
            
          主站蜘蛛池模板: 华坪县| 莱州市| 韶关市| 陇川县| 汕尾市| 大厂| 汉沽区| 乡宁县| 建平县| 阿克| 盐边县| 洛宁县| 南通市| 灵武市| 开远市| 公主岭市| 夏河县| 苍溪县| 兴国县| 桐梓县| 罗源县| 波密县| 潞城市| 莱芜市| 泾阳县| 页游| 通榆县| 栾川县| 大渡口区| 工布江达县| 绍兴县| 南漳县| 枣阳市| 武城县| 陈巴尔虎旗| 土默特左旗| 榆中县| 册亨县| 利辛县| 静乐县| 郁南县|