告别即将远去的win32时代

       随着linux的兴起和微软下一代操作系统的普及,我们即将告别win32时代。现代应用系统的一个重要特征是跨平台性。微软的.net框架中,托管代码是其重要特征之一,也就是说在windows写的程序可以脱离windows系统执行,.net框架有点类似于java的虚拟机,多平台化,微软帝国显然已经接受了这样的事实,并一直在为迎接下一代的软件开发模式而努力。

      DOS时代的编程我没有赶上,当我学会写程序的时候正是windows鼎盛时期,win32自然就成了自然的选择,有问题就直接查MSDN,在我所有用过的帮助系统里,MSDN是首屈一指的,它给我的帮助并不只是那些系统API的说明,更重要的是增强了我的英文阅读功底。然而,由于基于兼容性的考虑,windows API并不好用,有的函数有好几个版本,如果不仔细阅读MSDN很容易搞错。为了方便程序员的使用,微软开发了MFC框架库, 这是一个庞大的类库,对大多数的windows API以面向对象的方式做了较好的封装。VC遂成为最受欢迎的开发利器,visual studio也成为最经典的IDE,所谓VC,其实大部分指的是MFC,它的强大之处在于超强的底层操控能力和超高的运行效率,MFC的庞大大部分是因为windows的庞大,从技术层面上来说它只是对系统API的简单封装。VCwindows平台简直无所不能,数据库开发,图形图像开发,动态库开发,各种插件的开发等。在人们不大在意跨平台性的年代里,VC简直就是神话。

        随着windows平台病毒的泛滥,其安全性越来越为人们所诟病,甚至在大学课堂上都能听到教授们对windows的咒骂,对此我的理解是这是场误会,windows从诞生之日起就不是为安全而生的,它的宗旨就是方便用户使用,让不懂电脑的人也能尽快上手,娱乐是其重要目标之一。如果非拿windows当网络服务器的话,只能说我们选错了东西,windows并没有错。安全性与易用性是鱼和熊掌的关系,不可兼得。或许人们对windows突发反感的原因对微软不可一世的无可奈何。微软绝对是一家值得尊敬的公司。

       推动多平台化进程的另外一个重要原因是各种移动终端的出现,PDA,智能手机等,很多公司都用黑莓手机办公。有一次去餐馆吃饭,我们点菜的时候服务员不停地在手机(或是其他移动设备)上点来点去,点完菜后,菜单就直接到厨房了。windows虽然强大,但并不是无所不能,linuxsymbian,android,blackberry,palm,mac,应接不暇。

     多平台化给开发者带来的最大变化是,以前我们只需要遵循一个平台的开发模式就可以把应用做出来,现在面对的却是一堆的标准和通信协议。严格遵循标准构建程序架构,通过标准通讯协议与外界通讯。在这里,我们将不得不提到javaJava从诞生之日起就不只是一种编程语言那么简单,与它一同到来的还有一系列的企业级开发标准,其中最重要的是J2EE标准。J2EE也并非一个程序框架标准那么简单,我们可以仔细看下J2EE的架构图:

J2EE架构图

(这张图的最大遗憾是没有把java虚拟机加上,它是整个生态链的基础)

J2EE标准详细地定义了企业级架构每个部分的功能,这样的定义梳理了嘈杂的应用开发市场,每个开发团体都很容易在其中找到自己的位置。有些厂商专注于开发JSP/Servlet容器(图中为标识,所谓JSP容器就是JSP的运行环境)EJB容器,比如我们比较熟悉的tomcat,weblogic,jboss,glassfish等。应用开发厂商则以EJB的形式开发业务逻辑,然后用JSP/Servlet与用户交互,甚至可以提供通用的EJB模块。通过HTTP与用户交互,通过RMI/IIOP(远程对象访问协议)访问EJB,通过JDBC访问数据库,整个系统框架清晰,一目了然,开发者各司其职,构建起一条和谐的生态链。

J2EE定义了企业级应用开发标准,它指导我们该如何开发一套应用系统。可是用户的企业内有的可不止一套系统,他们很可能有多套系统,比如既有财务系统,又有人事系统,考勤系统,货物进销存系统等。这些独立的系统很可能需要通信,比如,给加班的员工付加班费(当然这样公司并不多见),这可能就涉及到人事系统,考勤系统,财务系统,也就是说他们需要一些互操作性,如果每个系统都是独立的,无疑将造成浪费。怎么办呢?

SOA(面向服务编程)应运而生,同J2EE一样,SOA也是一套规范,它规定了一些应用间通信的标准,如下图:

SOA

 

我们只看右边部分就够了,所有的应用通过Service Bus(也叫ESB 企业服务总线)通信,Service Bus上是标准协议,如soap。就如同主机间利用TCP/IP通信一样,服务间也通过标准协议进行通信。Service Bus担任的角色是通信链路和网络协议栈,事实上,在Service Bus上我们会发现很多熟悉的定义,如服务路由器,服务DNS服务器, 这些设施都是为管理多个服务而设的。

SOA架构下,我们可以用JAVA写一套服务程序,然后可以用C,C++,ruby,python等语言编写客户端来调用其服务。真正实现了跨语言跨平台的服务系统。这样,我们只需要对外公布自己的服务访问点,任何设备都可以访问。Java里的web service.net里的WCF都是基于SOAP协议的SOA的具体实现。

说了这么多,不妨回头看下win32,虽然从技术层面上讲,我们完全可以用win32实现一套基于windowsSOA系统,但没有人会那么做,因为它代价太大,实际意义并不大。以后除了底层开发者如JVM开发,.net框架开发会关心这些,作为应用开发者,它会离我们越来越远。越来越成熟的IT生态链会把合适的团队安排在合适的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值