从最初的面向过程编程,到后来觉得难以理解的面向对象编程,从软件工程的发展历程中来看,这已经成为我们编程路上熟知的两种编程方式。
![](http://img.blog.csdn.net/20160124190936475?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast&x-oss-process=image/resize,w_1400/format,webp)
![](http://img.blog.csdn.net/20160124191022461?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast&x-oss-process=image/resize,w_1400/format,webp)
接触了ITOO项目这么长时间,才发现,不知不觉,我们已经进入了软件工程发展历程之面向服务编程的开发。本篇博客的主题便是面向服务编程。
【一.面向服务编程从何而来?】
想要了解面向服务编程的发展方向以及它在软件行业中所占的地位,我们首先要了解的便是它的起源和发展。没有任何一种方法是一蹴而就的,应该是经历了数十年渐进的演化历程。下面,我们就来简单了解软件工程的发展历程及发展趋势。
其实,对于软件工程的发展历程,我们在自考《软件开发工具》一科中学习过。
上世纪四五十年代,第一台电子计算机诞生后,语言是面向机器的,程序完全依赖于硬件,这也成为了第一代语言。
第二代语言,即汇编语言的出现。它实现了人们的知识经验到对计算机操作命令的自动转变。
第三代语言的出现,属于高级程序设计语言。它实现了对机器的独立,即不依赖于特定的硬件系统,大大提高了程序的可移植性。
第三代语言一般都是过程化语言,即需要由编写程序的人一步步安排好机器的执行次序。而第四代语言,即非过程化语言,都是由人下达命令,然后机器自己去安排执行的顺序。
这些语言发展的背后,其实也就与结构化程序设计、面向对象程序设计、面向组件的程序设计方法相对应着。
现如今,面向服务的程序设计方法已成为潮流。
【二.面向服务编程为什么而来?】
在大致清楚了上述的发展历程后,我们不难发现,每一种新的方法与技术的出现都是建立在融合前一代技术的优点基础之上,并致力于改善前一代技术的缺陷。然而,每个新技术的出现又会面临新的挑战。
所以,在2000年末,面向服务方法作为应对面向对象以及面向组件的缺陷的解决方案出现。从各方面看,服务都是组件的一个本质上的飞跃,就像组件是对象的一个本质上的飞跃一样。
在软件行业中,面向服务是我们目前所知的构建可维护的、健壮的以及安全的应用程序的最佳方案,也是最可行的方案。
【三.什么是面向服务编程(SOP)】
SOP是一种体系结构,目标是在软件代理交互中获得松散耦合。一个服务是一个服务提供者为一个服务消费者获得其想要的最终结果的一个工作单元。
在生活中,SOP的实例无处不在。
例如发出了播放一个CD的消息,你可以将要播放的CD放入CD机中,CD机将为你播放这张CD,CD机提供了一个CD播放服务。这里的好处就是你可以用不同的CD机去播放同一张CD,上图中各个服务代表着不同的CD机,他们能提供同样的CD播放服务,但是服务质量是不同的。
在面向服务的应用程序中,开发者只需要关注于业务逻辑的编写,以及通过可交换的、可互操作的服务终结点暴露业务逻辑。客户端调用这些终结点,而不是服务代码或者它的实现包。
【四.面向服务编程有什么好处?】
(以下内容来源于《WCF编程》一书中,对于这部分内容自己体会的并不多,先记录下来,了解)
在开发面向服务应用程序时,我们能够实现服务代码与客户端使用的技术与平台的解耦(有所体会),也与并发管理、事务传播和管理以及通信可靠性、协议和模式无关。总的来讲,实现客户端到服务的消息传递的安全,就是对调用者的认证,它属于服务范围之外。服务根据需求仍然要实现服务自身的本地授权。在大多数情况下,客户端并不知道服务的版本:只要终结点支持客户端期望访问的契约,客户端就不用考虑服务的版本。为了处理客户端与服务之间传递数据的版本兼容,面向服务同时还构建了版本兼容的标准。
【五.ITOO中的面向服务编程?】
结合ITOO项目来说,每个模块都有各自的服务端和客户端。服务端都会有一个WCF服务应用程序,如下图:
客户端在配置文件中添加本系统的终结点配置,便实现了应用程序的通信。
【六.学习感受】
其实,在自己写的关于WCF学习的第一篇博客《什么是WCF》中,最开始就提到了面向服务编程。但那时候,焦点并不在那上面。那时候,接触WCF框架很久了,但一直都是照猫画虎,写了一个又一个方法,并没有对其中的思想、理论知识进行过思考。
从上周开始,和师父交流后,在师父的安排下,又让我重新开始WCF的学习,这一次,我想了很多问题。就拿ITOO项目来说,我不知道为什么加上WCF技术,我不知道WCF从哪而来,我不知道用WCF的意图是什么......这么多的不知道,让我回到了面向服务编程,所以,这应该算是我的WCF之旅的第一站。