498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/5D12210659.png" />
例如我们通过服务层提供上述的四种服务,然后在表现层中通过
服务层中的服务的调用来完成相应的功能,比如我们在表现层中有新纪录添加时,我们通过服务层的添加记录的方法来完成,服务层通过提供的服务直接完成相应的准备
工作,并且这些服务在定义时都是通过接口的方式来向外提供功能,因此只要满足接口契约就可以完成组件的替换工作,而不会影响系统的运行。
我们有的时候有这样的需求,我们的软件程序要求既有B/S的形式直接通过浏览器来完成应用,有时候还需要C/S客户端的形式访问系统的功能,这时候我们如果
通过服务来组织业务逻辑那么我们只需要写一个服务层就可以完成远程服务访问,而不用B/S下写一次业务逻辑调用,然后C/S下再写一次,而且这样一旦修改了相应的
业务逻辑,那么我们需要变动的代价很大。我们来看看服务层给我们提供了什么。
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/2E12210168.png" />
通过服务层我们可以不关心业务逻辑的实现,我们在用户图形
化界面中只需要访问相关的服务即可,举个简单例子,就行银行的银联,跨行取款的行为。下面可以简单的描述了用户取款的服务。
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/6C12210518.png" />
上面简单的描述了,用户的取款服
务,当然只要是银联的银行卡,都可以享受到跨行的异地取款,当然不管什么卡,提供给用户的服务都是相同的。当然我们这里说的是C/S客户端服务这样的要求,当
然如果说是B/S架构的形式,那么可能我们不用单独抽出这样的远程服务的形式。而服务层可能就是表现层的一部分,这时候我们建议不要把服务层设计成web服务,这
时候我们设计服务层时更关心服务层的抽象,而不是实现方式。
一般情况下来说服务层的设计实现,可能有时候和部署时的要求有关,例如有时候我们需要将服务部署在应用服务器上,这时候我们就必须考虑服务层必须发布成
远程调用服务或者Web服务,当然具体的远程调用服务可以有几种方式,我们主要看基于什么通信方式,是remoting还是soap,还是socket通信等。
当然有时候我们对服务分为二种类型,粗粒度的服务与细粒度的服务,那么我们怎么理解它呢?其实说白了粗粒度的服务就是某个大的服务,而细粒度的就是大
的服务内部的子服务。可以这样理解,粗粒度是按照用例来组织操作的,例如我们上面的银行取款服务,那么粗粒度的服务就看作这样的流程,用户插卡-输入密码-取
款-退卡。而细粒度的服务关系的是:检查用户账户,余额的转换等,包括一些比较详细的,密码的验证等等,这些都是细粒度的服务,可以把粗粒度看作某个用例的大
的业务操作,对领域中的对象不关心,只关心领域模型中的交互。细粒度可以看作领域模型中的具体对象及对象的行为。
接下来我们将讲述服务层常用的几种架构模式:
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/F512210834.png" />
第五节中将会详细的讲述每种模式及模式直接的区别及应用。
我们来看看服务层的应用场景及什么情况下使用服务层?
一般来说服务层适合企业应用系统中,也适合多层系统中,特别是业务逻辑比较复杂的系统程序中,如果说应用程序在多中形式的终端上使用时,推荐使用服务
层,当然如果你的系统中只有一种类型的前端表现形式时,例如Web应用程序,只有一个前端要求时,例如通过浏览器访问的形式,并且业务逻辑层能