SOA(Service-Oriented Architecture)
from: kaneboy's blog
1、DTO
Data Transfer Object,或者叫Entity、Data Object。DTO是指在一个对象里面只包含所表示的实体的数据,而不包含任何操作行为。传统的OOP理论认为建立这样纯粹只包含数据的实体类是不正确的,而SOA架构为了能够在分布的、异构的平台上能够顺利的传递数据,则正需要这样的DTO对象。
SOA对DTO的要求是使用方式是:在系统的各个Layer之间传递的,就是DTO,从DAL到BLL,从BLL到各种Service Facade,从Service Facade到外面的服务消费者(包括PL),都传递着DTO。因为这个要求,DTO必须要可被序列化。
2、Layer结构
BLL是不直接对外公开的,对外公开的是在BLL之上的Service Facade,Service Facade里面通常只包含static方法,供服务消费者调用。Service Facade传递和返回的基本上都是DTO,比如:
OrderInfo GetOrder(Int32 orderID);
void UpdateOrder(OrderInfo order);
OrderInfo就是一个DTO。
3、Service Facade的通道多样性
在作为对外的服务接口上,可能提供多种通道的界面,比如可以接收WebService、.Net Remoting、MSMQ、DCOM等等方式的调用,还可能是同步的、异步的调用。所以可能需要提供各种的Service Facade。
ShadowFax通过双重Pipe解决这个问题,第一个管道专门接收各种各样调用请求,然后统一传递给第二个管道,第二个管道再通过调用BLL来处理请求,然后将结果传给第一个管道。
4、每个Service尽量细化
比如有一个Service,调用它必须对调用者进行验证,那么不如再做一个单独的Authentication Service来专门提供验证服务,因为这个单独的Authentication Service可能以后将可以提供给其他的Service使用。
5、Service各自独立(解耦)
可以想象,在一个大型的系统(甚至可以大到整个Internet)里面,如果每个模块、子系统都以Service的方式来提供给外部的服务消费者,那么各个模块和系统都是直接可扩展、可重用的。他们相互相对独立。
引用:
Getting a little closer to SOA
Are objects with behavior bad for SOA?
Udi Dahan - The Software Simplist
Hernan de Lahitte's blog
From: WS-Arch(W3C)
An SOA is a specific type of distributed system in which the agents are "services." [A] service is a software agent that performs some well-defined operation (i.e., "provides a service") and can be invoked outside of the context of a larger application. That is, while a service might be implemented by exposing a feature of a larger application ... the users of that server need be concerned only with the interface description of the service. "[S]ervices" have a network-addressable interface and communicate via standard protocols and data formats.
landws的补充:
SOA 只不过是一种体系结构。它不是任何诸如 Web 服务这样的特定技术的集合;而是超越它们的,在理想的情况下,是完全独立于它们的。在业务环境中,SOA 的纯粹的体系结构定义可能会是这样的“一种应用程序体系结构,在这种体系结构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,可以以定义好的顺序调用这些服务来形成业务流程”。请注意这里的表述:
1.所有功能都定义为服务。这仅仅包括业务功能、由底层功能组成的业务事务和系统服务功能。这将会产生粒度问题,后面我们将对此进行讨论。
2.所有的服务都是独立的。它们就像“黑匣子”一样运行:外部组件既不知道也不关心它们如何执行它们的功能,而仅仅关心它们是否返回期望的结果。
3.在其最一般的意义上来说,接口是可调用的;也就是说,在体系结构的层面上,它们究竟是本地的(在本系统内)还是远程的(在直接系统外)、是用什么互连 Scheme 或协议来调用或需要什么样的基础架构组件来连接,都是无关紧要的。服务可能是在相同的应用程序中,也可能是在公司内部网内完全不同的系统上的不对称多处理器的不同地址空间中,还有可能是在用于 B2B 配置的合作伙伴的系统上的应用程序中。