平庸与杰出=加法与减法

思考其乐无穷 IT剩者为王

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
弹SOA不得不弹弹架构。

软件架构是个老的不能再老的话题,也是内涵外延具丰富的一个概念。什么是软件架构?IEEE 1471的定义:架构是在组件,彼此间和与环境间的关系,引导设计发展原则中体现的系统的基本结构。为了软件的健壮,客户与公司的双赢,各公司都在探讨寻求更适合自己的系统架构,期间历经风雨。

没有最好只有更好,架构也是这样。不同的项目需要用不同的架构来实现,适合自己就是最好的,外表花哨、概念复杂、功能强大不见得就适合自己、适合客户。架构跟项目有着密切的联系,所以在确定系统使用何种架构前要确定项目(产品)的需求、业务范围、使用范围等等。

那么SOA适合什么样的场景中使用呢?

如果您的项目(产品)是长期项目,强调业务高敏捷性、较高的业务复用性,建议您考虑SOA;
如果您的客户组织结构复杂,需求变化明显,客户关注数据共享;建议您考虑SOA.
...应该还有更多,烦请各位拍上来
从上面来看scm、drp、erp、crm、oa都比较适合构建在SOA架构上。

既然SOA是一种系统架构,那么用什么语言来开发比较合适呢?

首推:Java,Java较高的用户群,悠久的“历史”,最关键的是IBM\BEA有针对SOA的整体解决方案,俺对Java不熟悉,朋友可以到ibm官网查阅;
再首推:C#,C#在开发语言中肯定是后生了,好在有个好爹爹,所以很快就成了后起之秀,这还不足以成为SOA开发的首选,而是它爹爹推出了WCF,另外一个原因就是俺本人一直用C#,快6年了是C#坚挺的钢丝。

SOA的全称是面向服务的体系结构(service-oriented architecture,SOA),看着很复杂,听着很吓人,咱们就用减法,透过现象看本质。SOA的关键就是服务,开发的思路就是首先将功能拆分为组件,然后用服务包装这些组件,提供给系统终端使用。借用《SOA架构下分销管理系统的实现》的系统架构图就是组件层。既然SOA是面向服务,下面就着重聊聊服务。



服务是SOA的关键,在这儿就不说具体如何实现服务,各位肯定熟悉或者了解WebService,目前WebService是实现服务的主要技术手段。先说说在SOA中服务的大概分类:数据服务、逻辑服务、流程服务、中介服务,在我们目前开发的分销管理系统中主要使用了前三种服务,基本没有涉及中介服务。

数据服务主要实现对业务实体的RUID操作,这里所讲的业务实体不是指数据库系统中的表,而是业务操作中的实体,举个例子,在系统中订单(Orders)一般包括主单和细单两张表,但是在服务中我们将其归并到订单实体,尤其在UI操作中尤其方便。

逻辑服务封装了复杂计算或者复杂业务规则的算法,比如在drp系统中企业账龄服务,封装了判断是否可以发货给客户的相关规则。这些服务不针对具体的业务实体,在一定程度上可以看作使公共服务。

以上两个服务是SOA中的必需服务,无状态、重用性高、更改频率低。

流程服务封装企业组织的业务流程,流程服务的基础可以是组件、数据服务或者逻辑服务,在drp系统中我们使用wf封装组织的业务流程。

中介服务可以理解为服务适配器,将不同服务提供者和使用者的服务签名、消息格式进行转换匹配。

SOA的还有一个重要特性就是可以提供给第三方使用,其实这不是SOA的特性应该是服务的特性,既然SOA是基于服务的咱们也可以认为是SOA的特性。为了照顾到第三方,在定义服务接口以及消息格式时,尽量考虑到通用性,虽然服务使用者注册服务后,可以在本地形成代理类,个人还是不建议在服务接口中直接使用内部对象,比如Orders对象。建议做法是:定义一个xml格式的字符串,由服务来解析这个xml并进行相关的操作。

服务可以公开就不可避免的要考虑安全,在IBM、MS的SOA解决方案中都提供了安全解决办法,在WCF中内置了WSE,开发人员可以“相当”容易实现想要的安全级别,这个相当是相对于自行开发,毕竟.Net3.0跟以往的SDK完全不是一个思路,在1.1环境的开发人员熟悉3.0需要很长的一段路。WCF通过WSA支持服务事务,解决服务完整性问题,感兴趣的朋友不妨了解了解WCF。

弹了小半个下午,对soa的乱弹告一段落,有时间俺会继续补充。毕竟soa不是这么两三句就能聊透的。
posted on 2007-09-21 12:48  我是蚂蚁  阅读(2835)  评论(9编辑  收藏  举报