这个题目比较大,我也不打算长篇大论。鄙人才疏学浅,但有幸观摩了一些CAD软件的源代码,对架构设计有些零零碎碎的想法,呵呵,发泄一下,同事没人对这个感兴趣。

CAD软件有很长时间的历史了,因为需求来自工业界,和商业软件一样,有着漫长的发展史。但由于这些种软件和普通大众有一定的距离,所以很多地方不为人所知。广义上来说,3dMax,
Maya,这些软件也可以说是CAD软件,当然我的这个定义比较宽泛。这些产品都有一些共同的特点,技术上的,商业应用上的:

  • 交互性强。设计软件,从最开始的光笔,绘图板,到现代的三维扫描,动作捕捉设备,这些都是不断加入到这种软件的接口中的。因此软件的架构中,第一要素就是要考虑提高交互设计的效率。
  • 适应性强。这里面内容很丰富。首先软件要有很强的可配置性,GUI,快捷操作,甚至操作系统平台,都有可能根据需要进行定制。比如Maya,有windows,Linux版本,界面使用QT开发,而有些软件只有windows版本,那么可以使用MFC了。这个对架构设计的要求是很高的。这些灵活性时必须在架构设计定型之前就要考虑到的。其次,软件要提供用户定制开发的接口。由于设计软件,尤其是跨越很多行业的设计软件,必然要面多众多特殊的需求,有些甚至是矛盾的。用户开发接口就很重要了,也就是二次开发接口。比如AutoCAD提供的ObjectARX.好的二次开发接口可以充分扩展软件的功能,使得软件的市场份额逐步扩大,形成生态圈,这个是软件在商业上成功的基石。这个可以看AutoCAD这个产品的发展历史。
  • 可维护性。这个有两方面,一是开发,通常CAD软件的生命周期都比较长,尤其是比较大型的产品(当然商业上失败的不算~_^,不过失败的原因,很重要的一条就是这个)。为了适应随着技术进步和用户需求的发展不断变化的市场需求(这个比较搞,没办法,CAD软件的用户有些是很“变态的”,他们明白很多,甚至比开发人员还要理解软件),
    软件的架构必须能够体够足够的支撑。如果架构做不到,那么意味着在商业上可能失掉重要的机会,ProE,就是个重新架构的产品,老东家没办法,只好另起炉灶了。第二方面就是用户支持,这个同样非常重要。CAD软件有个特点,就是用户忠诚度很高,因为这是他们生存的工具。我在公司的论坛上面就看到,在美国有一家两代人都靠公司的产品谋生,如果产品出现为题,说不定那些家伙会提着枪到公司去的。呵呵。这里有个调查,能够说明这个问题:We
    then asked respondents to tell us what are the most important issues
    that they look for in a new reseller / vendor – and service and
    support came through as the most important element, with price
    getting slightly less mentions。  From:
    http://www.caddigest.com/subjects/research/select/022704_cadspaghetti_vendor.htm
  • 现代化的研发。这里面所说的,就是最近比较时髦的那些概念了,什么敏捷啦,SaaS.
    CAD也同样遇到这些概念的冲击,开发团队如果很庞大,那么管理问题就越来越重要。根据我的有限的经验,UG的开发团队管理是很出名的。CAD可以说是个智力密集型的产品。很多产品里面的技术,比公开的技术要先进非常多。这个是很奇怪的事情。同时CAD软件的专业性也决定了开发的复杂,要面对不同的行业,不同的需求,不同的国家,等等这些。比如国际化,如果你的软件要翻译成10国语言,那么你的架构设计就要小心了。