這是一篇寫給初學者看的文章。在前一段時間的招聘軟件設計師的過程中,我對每一個看似初學者的人都會問這個問題,“您覺得平臺相關性和平臺無關性哪個更好
一些”,呵呵(偷笑),其實這是唬人的,多數回答者都會順著出題者假裝的思路回答“我個人認為平臺無關性比較好”,可是只要有點軟件設計經驗或是對這個問
題有所思考的人都知道其實這個問題不只兩個標準答案。
關于平臺無關性,我不想說什么,說什么也沒用。大量軟件設計或軟件架構以此來標榜自己的優秀和出眾,其實這沒什么,因為大部分平臺無關性的工作不是由你來
做的。如果你正在寫一個Java程序,并依照Sun的100% Pure
Java的要求來做,那么應該就是平臺無關的,如果你正在寫一個Eclipse應用或直接用SWT/JFace組合來寫應用程序,那么也是平臺無關的,如
果你喜歡C/C++,并在用wxWidget寫應用程序,那么也是平臺無關的,如果你實在是很牛,在依照OSGi的規范寫代碼,那么ok,你的程序已經可
以從微設備到大型機統統可以用。
平臺無關也是一個相對的概念,在多個操作系統上運行可以稱為平臺無關的,以往在多個不同品種的CPU上運行可以稱為平臺無關性,還有一件搞笑的事情,某個
公司出了一套系統,可以在Java和.NET兩個平臺上運行,但卻只能依賴于Windows系統(因而只能依賴于x86芯片),居然還可以稱平臺無關性,
可見這個概念有多么混亂。我個人評價是不是平臺無關的僅有一個標準,那就是——你有沒有為平臺無關做出貢獻!如果你為了能在多個平臺上跑出你的代碼而做了
很多工作,那么你就可以稱自己為平臺無關的,而如果你僅僅依賴SWT工作,那就不能稱自己為平臺無關的。不過話又說回來,如果你把SWT包含在自己的軟件
中,并為此出了該軟件的多個版本(每個SWT的版本是一個發行包),那么你也可以稱此為平臺無關的,雖然這個貢獻并非出自你手。
平臺無關也不見得總是個優點,很多系統為了堅持平臺無關而犧牲了很多特性,或不必要的提高了成本。比如前幾年很多系統原意搞WEB界面,導致了很多易用性
方面的問題,Cooper說Web使人機交互技術倒退了10年,的確如此。我還讀過一段源碼,大概是一個單機版個人軟件的源碼,令人驚奇的是,該軟件很
小,卻把很多筆墨花在了業務對象和JDBC訪問層之間的一個“抽象數據存儲層”,理由是便于將來移至非JDBC平臺,天哪!會有多少用戶有機會使用不支持
JDBC的數據庫??!!這種設計和下面一種設計是一樣的效用:“為了讓這段代碼支持非OO語境,我決定整個軟件只用一個類!”。這種追求可以用四個字來
表述就是:“過渡設計”或者“吃飽撐著”!
相反,這個世界上有80%的軟件是平臺相關的,這沒什么不能理解的。就像“民主和專制的TCO哪個高”這個問題的答案一樣,如果我現在要招聘的是部門經理
或副總裁,我很可能會問這個問題。事實上是,在整個人類的發展歷程中,總成本最低(即總效率最高)的幾個“社會時期”,幾乎全是專制,但如果你不假思索,你的
答案一定是民主!當然,平臺相關也是相對的概念。
說到這里,有興趣的讀者可能會說結合二者是最好的選擇,我不喜歡這種說法,因為太辨證了,我喜歡的是首先考慮依賴于哪個框架,再找尋該框架的平臺無關性,
如果沒有必要,盡量不要為平臺無關(實際上是一種優先級非常低的非功能性需求)做任何事情,但如果有必要且成本允許,再做少許考慮,最好還是能夠重用開源
世界的產品。
仍以OSGi為例,這個例子很好,它對Java語言本身(還不是面向對象的公共語義)非常依賴,直接依賴至VM的spec,當然也寫了些代碼以避開
ClassLoader的個性,即使如此,OSGi事實上實現了從微設備到大型機全套支持,借助Java的平臺無關性,既沒有易用性、性能和成本方面的絲
毫損失,也為上層平臺提供了平臺無關的環境。同樣,為Mac
OSX設計的很多非常優秀的軟件都沒有考慮平臺無關的問題,而是用在PC上再做一套的方式來解決,這些都是值得思考和借鑒的解決方案。
有點忙的泡泡
(轉載本文需注明出處:Brian Sun @ 爬樹的泡泡[http://www.briansun.com])
posted on 2005-11-17 09:19
Brian Sun 閱讀(6206)
評論(10) 編輯 收藏 所屬分類:
軟件 、
隨心