写点什么

SOA 领域建模,用 OOD 还是 SOA 方法?

  • 2011-04-07
  • 本文字数:2135 字

    阅读完需:约 7 分钟

近日,在 Gervas Douglas 的 SOA 邮件讨论组的 OO 和 SOA 两大阵营间展开了一场讨论,探讨的话题包括领域建模(Domain Model)、消息格式和服务设计等。讨论结果得出了几条适用于大多数 SOA 实施的重要原则:

  • 面向服务的建模技术,譬如 DOSOM(面向领域的服务建模),是识别候选业务服务的第一步,此处领域是根据业务的功能结构清晰地划分的。
  • 定义完业务服务契约(Contract)之后,OOD 是设计服务实现的理想方法。
  • 通过 MDM(主数据管理)技术,通过定义最小的规范模型,使服务之间需要交换的信息量尽可能地少。

整个讨论因 Kirstan Vandersluis 在讨论组的一则有关领域建模的发问而引起的,关于实现企业消息格式标准化的问题,虽然他自己有下列三种考虑,但是在提问中他想得到思考此类问题的通用原则。

1. 基于外部消息标准(该行业的标准是 MISMO)来构建内部消息格式。虽然此消息集合很臃肿,但它是成熟的,支持大多数业务域,并且具有扩展性,可为该公司及其流程扩展一些特有的属性。
2. 根据企业数据模型创建一个基于 XML 的消息集合。该公司在企业数据模型上已经投入了很大资金,其模型已经包含了业务所需的绝大多数属性。笼统地说,我们已经通过 ER Studio 中生成了 XML 模式,并将对此模式基础上进行调整以定义消息负载(payload)。
3. 将 MISMO 主要用作实体的定义,然后简化其结构以提高使用性。我们可利用 MISMO 丰富的通用词汇,但在接下来的几年里我们可能需要定义出几十种交易的消息格式,而它们在 MISMO 中已经定义了。

Steve Jones 给出了回复,分享了其本人在 SOA 信息建模方面的经验以及他所观察到的三点心得:

  • 行业标准(比如 MISMO)适用于与同行业的外部合作伙伴之间的通信
  • 规范模型,只有在内部使用、交互场景不经常变化、并且实体不在多个业务域间共享的情况下才是适合的。
  • 对于大多数企业内部的场景,都是为可变性和灵活性而设计的,换言之,通过 MDM 共享业务实体并维护尽可能少的规范模型。这样做同时避免了一个陷阱——为妥协企业内的某个行业之外的应用(比如 HR)而扩展行业标准的做法。

Ashraf Gulal 从 OOD 的角度分享了他的观点

领域数据是一些类(class),它们封装了实现服务所需的信息。这里应该使用经典的对象 / 关系映射(ORM)方法。

对此, Steve Jones 回复

ORM 与服务语义(semantics)或 SOA 一点关系也没有,而且“领域数据是一些封装了实现服务所需信息的类”的提法也稍显随意。数据和类是完全不同的两个事物,一个是结构化元素(类),而另一个则是实例(数据)。

而 David Tildesley 则支持 Ashraf Gulal 的 OOD 方法,他说:

我比较赞同 Ashraf 的观点——将 OO 的设计原则(封装、松耦合、重组合轻继承)应用于 SOA。正是因为这些原则被人们丢弃了,才导致了 SOA 项目以及应用开发走向失败及混乱的局面。

我推荐 Coad 和 De Luca 等人的建议,使用四种颜色的建模原型和原型域图形(archetype domain shape,ADS,又称领域中立组件,domain neutral component 或 DNC),这是久经验证的技术 / 模式。ADS 将提示你,那些松耦合的逻辑组件(一组类)将变成“实体”服务,它们将成为“业务组件”,而且,从这里生成 XSD(避免 XSD 限制、将一切设置成可选的、通过 import 和 include 合理地打包)也是相当直观的。你的 SOA 消息就是 CDM 的视图,其中包含业务组件以及其他与 SOA 基础设施相关的元数据 / 上下文。每个业务组件的中心有一个核心实体(粉色或绿色图形)。解耦点位于角色(黄色图形)上面。

扬 SOA(包含某些指导原则的方法)抑 OOA 对我而言是徒劳的——这好比在传统的三层应用架构中将 UI 与“OO”比较一样。为了达到 CDM 和候选服务列表,SOA 执行者完全可以自由地选择 OO 的设计实践、模式和技术或其他方法。

Michael Poulin 和 Steve Jones 都不同意使用这种方法来识别候选服务和实施领域建模。 Michael Poulin 的回复提到了几个要点:

SOA 是一个功能性模型,不是对象模型。仅此而已!正因为如此,在设计时,需要特别地关注模型,因为功能模型更加接近于人的行为,并且附带了一些以技术为中心的 OO 方法所不能承载的信息。 当你做容器设计时,第一步不是 OO 或 DDD(领域驱动的设计),而应该先 DOSOM,而后才是 OO/DDD。

Steve Jones 这样总结

对于服务,我提倡使用 SOA 方法来创建清晰划分的领域,然后使用诸如 MDM 之类的技术来创建尽可能小的规范模型,这样可以减少服务交换所需的信息;而对于单个应用并且这些服务都是紧耦合、高内聚的情况,以 OO 为中心的方法则可能是更好的选择,而且确实可行,不过,对于跨多个业务领域或组织的情况,这种做法就不可行了。 业务架构,使用 SOA;实现服务和基于最少量信息交互(而非 CMD)的信息交互模型,使用 OO。

David Tildesley 从 MDM 的角度总结了该讨论,他引用了一个 Steve Jones 确认的适合于使用 MDM 的场景:

应该可以这么说,MDM 关心的是通过创建“XREF”,为 customer 建立一个统一的视图——当有多个应用(它们往往位于不同的业务线)且每个应用各自拥有其自己的 customer 视图时才需要它。MDM 告诉我们 A 系统中的“Thomas J. Smith”和 B 系统中的“Tom Smith”到底是不是同一个人,并且它在每个应用中维护了指向实体的外键引用。


查看英文原文: OOD vs SOA Approach to SOA Domain Modeling

2011-04-07 21:523137
用户头像

发布了 184 篇内容, 共 72.9 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
  • 实战:将 ToDo 应用扩展为一个 REST 服务

    这一讲,我们就把前面已经写好的 ToDo 应用扩展一下,让它变成一个 REST 服务。

    2021-08-30

  • 聊聊面向服务的架构

    再到微服务的演化过程。但在本文作者看来,自SOA架构风格提倡以来,软件架构并未有特别的突破,更多是在其之上做不断的演化迭代。

  • 软件设计到底是什么?

    软件设计并不是设计模式,也不是某种技术实现等,它到底是什么呢?其实它包括模型和规范两个部分。

    2020-05-25

  • 开篇词|带你吃透 DDD

    在开发微服务,遗留系统改造、架构治理、企业架构、研发效能提升、架构师培养等很多方面,DDD都有用武之地。

    2022-12-06

  • 架构决策作为可复用设计资产

    面向服务架构的决策建模(SOAD)框架可以帮助捕获那些经常重现的架构决策,并在相关项目中使用这些决策来指导设计。在这篇IEEE文章中,Olaf Zimmermann探讨了这种以决策为中心来指导设计工作的方法。另外他还描述了在SOAD元模型中使用的两类模型:指导模型和决策模型。

  • 开篇词|为什么你需要学习业务建模?

    业务建模首先是一个定义问题的方法,其次才是解决问题的方法。通过定义问题,甚至可以把解决方案的复杂度直接降低几个数量级。

    2021-06-23

  • 实体服务的模式反模式之争

    一些人认为实体服务(Entity Services)或以业务为中心的实体是面向服务架构的基本要素。这一观点并没有得到所有人的认同。那么,实体服务是SOA模式,亦或反模式?

  • 26|泛化的实现(下):怎样为泛化编写代码?

    泛化的编码主要解决的问题就是,怎么把内存中的对象和数据库表里的数据进行相互转换。

    2023-02-09

  • SOA 与 DDD 存在共生现象吗?

    随着现实问题复杂性的增大,毫无疑问,我们有时需要综合多种技术才能解决这些问题。而面向服务的架构(SOA)与领域驱动的设计(DDD)之间良好的共生关系就是这样一个例子。

  • SOA 治理中的角色

    本文探索了成功的SOA治理需要的一套潜在的角色:“SOA领域架构师”角色,“SOA平台架构师”角色,“服务设计者”角色,“业务服务所有者”和“技术服务所有者”。你可以采纳这些名字,也可以选择一套更适合你当前情况的术语,但是我相信在接下来本文中提到的那些任务对应的角色需要在各种情况下正式的授予,这样可确保SOA能实现它做的所有承诺。

  • 《SOA 治理》作者访谈

    InfoQ有幸介绍了新书《SOA治理:实现并保持业务和IT的机动性》,并采访了它的作者:Clive Gee,William A. Brown,Robert G. Laird和Tilak Mitra。采访内容包括重用在SOA中的地位、用于SOA治理的工具以及业务/IT对齐等。

  • SOA= 集成?

    SOA的存在已经有些年头了,但就“SOA到底是什么”这个问题而言,在SOA从业者中依旧未形成一个统一意见。最近在Gartner AADI峰会上由Yefim Natis发表的演讲引发了一场关于SOA/集成之间关系/区别的无尽争论。

  • 十年 SOA:当前的位置和未来的方向

    SOA 10岁了。在这次虚拟研讨会中,InfoQ聚集了几位经验丰富的企业架构师来分享他们的观点,他们是:Jeff Andre,Eric Ballou,Dave Hollander和William El Kaim。他们谈到了重用、业务/IT对齐、治理……

  • 如何摆脱令人头疼的架构依赖?

    架构能够对系统和它的元素之间的连接关系进行建模。但架构性的依赖的真实复杂性可能是非常难以捉摸的。我们在创建集成系统时会共享架构信息,但同时也创建了复杂的、难以查找的依赖。本文介绍了一种简单的建模方式,它能够帮助你分析在复杂的技术环境中对架构性依赖进行分析。

  • 什么办法可以在讨论中自然形成统一语言?

    事件建模法作为一类方法的共同性质,也就是通过事件表示行为,再根据事件顺序去组织业务逻辑。

    2021-07-10

  • 当 SOA 遇到形式化方法

    最近,WS-CDL规范的主要作者Steve Ross-Talbot发表了一篇博客,在其中论述了在保险服务业中如何使用基于CDL的方法论成功地开发和部署SOA,并且可以成功节省80%的工作时间。

  • 一种针对 SOA 的消息类型架构

    这篇文章提出了一种新的消息类型架构,它以两个DSL为基础,起到了帮助管理SOA中消息格式的作用。这种方法通过消息类型定义中引用的企业数据模型促进了重用,并且有助于使数据治理流程和SOA治理流程保持一致。

  • 意见:SOA 不需要公共信息模型

    松耦合并不只是使用一个公共的语法和一些协议,它还涉及一组共享语义的创建和管理。让我们快速地了解一下公共信息模型和共享语义的区别,并决定那种更可能地被使用在面向服务架构中。

  • 如何基于 DDD 构建微服务?

    本文将讨论微服务与 DDD 涉及到的概念、策划和设计方法,并且尝试将一个单体应用拆分成多个基于 DDD 的微服务。

  • 通用信息模型,助你构建丰富语义的服务

    尽管有许多文章都强调了服务互操作过程中消息语义的重要性,但是,描述特定的通用信息模型如何实践的指南却少之又少。Gandhi Sivakumar和Ram Viswanathan在IBM DeveloperWorks上的一篇文章尝试填补这方面的空白。

发现更多内容

BI掌柜系统开发案例详情丨BI掌柜开发源码功能

系统开发咨询1357O98O718

登顶GLUE榜单的文心又开课了,一站式教学搞懂信息抽取

百度大脑

百度大脑 GLUE 信息抽取 EasyDL

Serverless 时代 DevOps 的最佳打开方式

阿里巴巴云原生

Serverless DevOps 微服务 运维 云原生

算法喜刷刷之1021删除最外层的括号

Kylin

算法 28天写作 3月日更 21天挑战

前端工程化之H5性能优化篇

百度Geek说

百度 大前端 H5

全凭阿里大牛总结的Java面试笔记,首战成功拿蚂蚁offer

Java架构之路

Java 程序员 架构 面试 编程语言

php in_array的低性能

架构精进之路

php 3月日更

告别交通拥堵和数据孤岛,区块链成智慧交通发展新基石

旺链科技

区块链应用 智慧交通

编译android源码!2021年Android面试心得,学习路线+知识点梳理

欢喜学安卓

android 程序员 面试 移动开发

孤寡程序猿找女朋友的方法论

不脱发的程序猿

程序员 找对象 28天写作 3月日更 脱单

StarRocks在中移物联网PGW实时会话业务领域的应用

StarRocks

大数据 数据分析 物联网 IoT OLAP

全球案例 | Infobip :这家估值十亿美元的公司像初创企业一样规模化发展,像大型企业一样标准化

Atlassian

DevOps Agile Atlassian Jira ITSM

《Redis 核心技术与实战》学习笔记 03

escray

redis 学习 28天写作 3月日更 Redis 核心技术与实战

java String长度有限制吗?

ddww

315曝光的侵犯个人信息行为可以用区块链来规范吗?

CECBC

区块链

JDBC—对数据库的通用增删改查

打工人!

Java 数据库事务 MySQ JDBC crud

2021年技术预测:从云计算到边缘以及两者之间的一切

浪潮云

云计算 边缘计算

【实战问题】-- 高并发架构设计以及超领现象解决?

秦怀杂货店

Java 架构 高并发

JDBC—连接数据库工具类(JDBC_Utils)

打工人!

Java JDBC java工具类 操作数据库

Github上2021最新最全面的面试题库(Java岗)程序员不容错过

比伯

Java 编程 程序员 架构 面试

阿里P8大牛手把手教你!这是一份面向Android开发者的复习指南,快来收藏!

欢喜学安卓

android 程序员 面试 移动开发

B2B 产品市场中「价值营销」的 8 个关键词

To B Park

网络编程及通信三要素

五分钟学大数据

大数据 网络编程 28天写作 3月日更

告别交通拥堵和数据孤岛,区块链成智慧交通发展新基石

CECBC

交通

2021年新兴的十大区块链技术趋势

CECBC

数字技术

【LeetCode】翻转链表Java题解

Albert

算法 LeetCode 28天写作 3月日更

霸榜Git!2021年阿里巴巴Java面试权威指南(泰山版)

Java架构追梦

Java 架构 面试 泰山版

万象:百度的海量多媒体信息处理系统

百度Geek说

大数据 搜索引擎 百度 后端 #富媒体#

SOA领域建模,用OOD还是SOA方法?_SOA_Jeevak Kasarkod_InfoQ精选文章