posts - 80,comments - 749,trackbacks - 2
这是一篇写给初学者看的文章。在前一段时间的招聘软件设计师的过程中,我对每一个看似初学者的人都会问这个问题,“您觉得平台相关性和平台无关性哪个更好 一些”,呵呵(偷笑),其实这是唬人的,多数回答者都会顺着出题者假装的思路回答“我个人认为平台无关性比较好”,可是只要有点软件设计经验或是对这个问 题有所思考的人都知道其实这个问题不只两个标准答案。

关于平台无关性,我不想说什么,说什么也没用。大量软件设计或软件架构以此来标榜自己的优秀和出众,其实这没什么,因为大部分平台无关性的工作不是由你来 做的。如果你正在写一个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 阅读(6140) 评论(10)  编辑  收藏 所属分类: 软件随心

FeedBack:
# re: 平台相关性与平台无关性
2005-11-17 10:23 | weide
某个公司出了一套系统,可以在Java和.NET两个平台上运行,但却只能依赖于Windows系统(因而只能依赖于x86芯片),居然还可以称平台无关性,可见这个概念有多么混乱。
--------------------------
有些不大理解:能够运行在Java平台上,怎么会只能依赖于Windows系统?


我个人评价是不是平台无关的仅有一个标准,那就是——你有没有为平台无关做出贡献!
--------------------------
这个也不认同;不管有没有做出贡献,只要“平台无关”,那就是平台无关吧?  回复  更多评论
  
# re: 平台相关性与平台无关性
2005-11-17 11:03 | 非鱼
某个公司出了一套系统,可以在Java和.NET两个平台上运行,但却只能依赖于Windows系统(因而只能依赖于x86芯片)

--------

如果只能依赖于x86芯片,应该用在Linux上也可以吧?  回复  更多评论
  
# re: 平台相关性与平台无关性
2005-11-17 14:45 | s5s5
编程好神奇啊,我有空要学一学,嘿~  回复  更多评论
  
# re: 平台相关性与平台无关性
2005-11-17 15:28 | Brian Sun
这个例子有些公司内部的技术细节不便于透露,但是只能说为了迁就.NET的一些特征,该系统只能在Windows上运行。

至于“平台无关”,我已经说过了它是相对的概念,你怎么描述你的产品是平台无关的呢,“芯片无关”?“操作系统无关”?还是“运行平台无关”?

可能是我思路常常跳跃的缘故,也可能是很多浏览网页或订阅RSS的人只读文章的一半的缘故,您没能理解我的意思。  回复  更多评论
  
# re: 平台相关性与平台无关性
2005-11-17 17:25 | 非鱼
有些地方不明白:

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

能否解释一下?  回复  更多评论
  
# re: 平台相关性与平台无关性
2005-11-17 22:13 | Brian Sun
对于一个社会而言,总成本和总效率是成反比的。通常作为一个指标出现,原文是笔误了。

  回复  更多评论
  
# re: 平台相关性与平台无关性
2005-11-22 02:13 | weide
仍以OSGi为例,这个例子很好,它对Java语言本身(还不是面向对象的公共语义)非常依赖,直接依赖至VM的spec,当然也写了些代码以避开 ClassLoader的个性,即使如此,OSGi事实上实现了从微设备到大型机全套支持,借助Java的平台无关性,既没有易用性、性能和成本方面的丝毫损失,也为上层平台提供了平台无关的环境。

-------
有这么神奇?
希望看到对楼主对osgi的更多文章  回复  更多评论
  
# re: 平台相关性与平台无关性
2005-11-22 13:14 | Brian Sun
weide,没问题,呵呵,谢谢捧场!
  回复  更多评论
  
# re: 平台相关性与平台无关性
2005-11-28 11:33 | errorfun
最近在做一些需求分析和系统分析的工作,也在考虑这个问题,看完后觉得自己也犯了这“过度设计”这个错。想得太多了,现在一般公司不用WINDOWS的大概没有那么多个。  回复  更多评论
  
# re: 平台相关性与平台无关性
2006-06-10 10:28 | sangern
路过
MARK  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: