当下,SOA这个词已经深入人心,几乎没有人不说自己设计的应用是遵从SOA的。
很多人对SOA的理解就是分层、模块化、面向对象。。。这种理解对不对后面再说。先看一些问题:
我今天看了一个开发团队的开发工程包结构,部分类的命名及组织产生了如下印象:
- 每个usecase是一根根烟囱
- 烟囱与烟囱之间连模型都没有共享。其实业务模型是有设计的,主要是实现模型没有保持业务模型的结构特征,全部成了“值对象”,开发人员天天把这些值对象叫做领域对象。
- 有三层,是Struts帮忙定义的,三层分别根据usecase分包
这也是我们宣称的SOA系统!!!!连最基本的模型设计、模块设计、分层设计都没做好,难怪年年重构、年年完成不可能完成的任务!!!我确信这种重构、这种不可能完成的任务还会年年持续下去!!!
究竟什么是符合SOA风格的系统?先看看SOA宗师IBM的一篇文章:
http://www.ibm.com/developerworks/cn/architecture/ar-soastyle/
我来总结一下。
SOA能达到什么目的:
1.实现业务与IT的一致性;
2. 创建更灵活的反应更敏捷的IT基础设施;
3. 简化集成实现;
SOA要怎么做?
- 从应用程序到流程和服务。消除应用程序,将软件系统创建为一组由业务流程进行协调的交互服务。每个服务实现企业上下文中定义的特定业务目标或功能,业务流程表示必须实现的业务解决方案。这个讲的比较抽象,我的解读就是服务表示一个最细粒度的业务目标或功能,由业务流程来编排这些服务,实现更大粒度的业务目标或功能,业务流程也是服务。注意,这里隐式的定义了服务的概念,服务是自治的,可替换的,可被多个流程编排的,不耦合流程上下文的,是直接面向业务目标或功能的,不是一个公共函数库,服务不是封装了数据和方法的类。
- SOA的服务基于业务资源(对象)定义,不支持操作者的执行上下文,而是支持业务资源(对象)。这里的业务资源是指业务实体。业务实体也是来自业务的。所以,SOA能保证IT与业务的一致性。
别再说你的应用程序或烟囱遵循SOA的架构风格!