【IT168 信息化】“事情可以变的尽可能的简单,但是不能更加简单。”——爱因斯坦
爱因斯坦在很多年前做了上述的著名论断,到如今,这句话依然与大型软件系统的构建息息相关。不幸的是,如果按照爱因斯坦的这句话,有太多的软件系统已经失败了。一些系统做的太简单而不能胜任其应有的性能;而另一些系统则做的过于复杂,使的开发和维护的成本急剧上升,更不用说不同系统整合变得也几乎不可能了。看上去要达到“简要”这个程度更像是一个不切实际的梦想。我们到底错在里呢?
真实依赖
在这里,我们先给出一个名词的定义“真实依赖”,它代表了一个系统依赖于另一个系统提供的功能的一种状态。如果这个世界只存在“真实依赖”,那么爱因斯坦的预言也许在多年以前已经实现的很好了。问题就在于有“真实依赖”的同时,我们同样创建了“虚假依赖”。
如果你去海外出差,你知道你必须随身带着电源适配器,否则你的生活将一塌糊涂。在这里,“真实依赖”是你需要电源,而“虚假依赖”是你的插头必须能够插到当地的插座去。看看那些不同国家的各色的插头,你会注意到,它们有些又小又紧,而有些则又大又粗。
在这里给我们的教训就是,“虚假依赖”是不可以移除的,但是我们可以削弱它。如果我们能够理想的把系统间的依赖降到最低,那么就已经达到了松耦合的目的了。我们可以把爱因斯坦那句注明理论改为:“虚假依赖应该降到最低,而真实依赖是不可改变的。”
什么是SOA
现在,我们可以给SOA下一个定义了。SOA是旨在使相互作用的软件业务达到松耦合效果的架构。服务是一个由服务提供者提供的,实现服务消费者请求的业务单元。提供者和消费者都是软件代理为了各自的利益而产生的角色。
这听起来有些太抽象了,但SOA实际上无所不在。让我们来看一个在我们生活中随处可见的有关SOA的例子吧。以CD为例。如果你想播放CD,你会把CD插到一个CD播放器里面,CD播放器来为你播放。在这里,CD播放器提供了播放CD的服务。令人高兴的是,你可以更换不同的CD播放器。你可以用一个随身的播放器或是你的昂贵的立体声系统来播放同一张CD。它们都给你提供了播放CD的服务,但是服务质量是不同的。
SOA的思想与面向对象思想有着很大的差异。在面向对象编程中,数据和行为被强烈的建议绑定在一起。因此,在面向对象的设计思想中,每个CD应该有它自己的播放器,并且不应该被分开。这听起来有些可笑,但这确实是我们构建许多软件系统所用的方法。
服务的结果通常可以改变消费者的状态同样也可能改变服务提供商的状态,或者也可能都改变。在听完用你的CD播放器播完的音乐后,可以说你的心情发生了变化,从“沮丧”变成了“愉快”。如果你想要一个涉及到双方状态都改变的例子,那么在饭店吃饭将是个很好的例子。
通常我们找人做某项工作是因为那个人是这方面的专家。而消费一个服务通常要比我们自己干来的更便宜和高效。我们大部分的人都能意识到我们不可能成为每个领域的专家。这个道理同样适用于构建软件系统,我们称之为“关注分离”。这已经被认为是软件工程的一条基本原理。