某OA提供商一直在标榜自家OA系统是C++写的,还断章取义引用维基百科中关于C++与Java的比较一文。在此有必要正本清源。
随计算机技术的飞速发展,编程语言越来越来多,从最早的汇编语言,后来的C语言及C++(面向对象的C),后来产生的各种针对性强的语言,比如用于科学计算的FORTRAN,用于数学计算的MATLAB,再后来随着网络技术发展诞生了Java(C++改造而来,吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念),Java语言应网络而生,使得开发网络程序变得简单,而为动态网页设计了Java Servlet Page(JSP),使得WEB编程变得更容易。
前段时间终于抽得半日闲,看了一下C++写的OA系统,首先从其安装说明文件说要预先安装.net4.0,还提供了链接地址,单从这点就可以看出其实是基于微软的.net平台,继续往下看必须手动配置IIS(Internet Information Server),再一个就是要配置ASP.NET,在其对就的目录下面有很多.aspx文件,这不就是微软的ASP(Activex Server Page)发展而来的ASP.NET吗?用文本编辑器打开,源码都在呢,自己说jsp的暴露了源码不安全,这不是明显的打脸了。
那C++又到底是怎么回事呢?早期的Web动态交互用的是CGI-BIN,后台用C或C++向前端输出HTML,后来发展到Fast-CGI,终究因开发成本高,被广大程序员抛弃,只有极个别的还在用,那么某OA系统提供商是不是属于那极个别的呢,当然不是,其宣传文档中说的是独辟蹊径,深挖一下就一目了然了,ASPX(使用的是C#语言,运行前编译成解释型的dll动态连库)-->调用bin目录下解释型的dll动态连库-->调用C++编写动态连接库(COM组件)-->调用数据库.其实我们可以看出只不过是其在最底层应用用了C++做了封装,是什么技术封装的呢?继续深挖其实用的是COM技术(Component Object Model,组件对象模型,方便各种编程语言调用),是有其优点,但是晦涩难懂,这项技术并非什么新技术,诞生了N多年,真正掌握这项技术人不多(应用场景窄,工作机会少)。做OA系统底层用这个其实只是封装一些业务逻辑及数据库操作。一味的追求速度实际上是牺牲系统的可维护性及未来人才的可持续性。
从上面的分析某OA系统主要还是ASPX脚本语言最终调用了COM组件,而以单纯的C++语言同Java语言比速度,显然是不恰当的,这样只会误导OA用户。再说其它的PHP,JSP,.....等等,也都是可以调用COM组件的。比如:JSP(执行前会被编译成bytecode)-->javabean-->通过jni方式调用C++编写动态连接库(COM组件)-->调用数据库.再说Java专为数据库设计的JDBC其性能并不会比C++调用ADO的性能差。
综上所述可以看出OA系统实际上是多种语言编写而成,从WEB服务器所支持的脚本语言的差别来分主要有:JSP,ASP,PHP.