写点什么

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

  • 2007-06-19
  • 本文字数:1292 字

    阅读完需:约 4 分钟

一些人认为实体服务(Entity Services)或以业务为中心的实体是面向服务架构的基本要素。这一观点并没有得到所有人的认同。那么,实体服务是 SOA 模式,亦或反模式?上个月, Shy Cohen ,在文章“面向服务架构中服务的本体和分类”中定义实体服务如下:

“实体服务揭示并显露出系统中的业务实体。它们可以被认为是业务过程中以数据为中心的组件(名词),如:雇员、顾客、销售订单等。实体服务的例子包括,管理顾客信息的客户服务,或管理顾客所下订单的订单服务。”

Shy 还写道:

“实体服务有一个普遍的特点:在实体级别支持增、查、改、删(CRUD),同时为了解决问题领域、支持应用特性和用例的需要,添加了领域特定的操作。领域特定操作的一个例子是:客户服务暴露一个名为FindCustomerByLocation的方法,它可根据顾客的地址定位顾客的 ID。”

Thomas Erl(即将出版的“ SOA: Principles of Service Design ”的作者,同时他还是其它几本 SOA 书籍的作者),以类似的方式定义实体服务

几乎在每个企业中,都将会出现业务模型文档,它用来定义组织相关的业务实体。业务实体的例子包括顾客、雇员、发票和索赔等。实体服务模型表示一个以业务为中心的服务,它基于一个或多个业务实体的功能边界或上下文。由于对大多数父业务过程不可知,它被认为是一个高度可复用的服务。结果是,多个父业务过程可利用实体服务实现自动化。实体服务也被认为是以实体为中心的业务服务业务实体服务。右图展示了一个实体服务的例子。它的一些能力让人想起传统的 CRUD(增、读、改、删)方法。

看起来并不是每个人都同意此观点。John Evdemon,Shy 的同事(同样工作于微软),认为 CRUD 接口是 SOA 的反模式

“对 web 服务而言,CRUD 操作是错误的代理级别。CRUD 可能在服务内部或横跨几个服务实现,但它们不应该以这种方式暴露给消费者。这是服务将内部(私有)能力渗透到服务的公共接口的例子。”

同样,在谈及 CRUD 时, Steve Jones (“企业SOA 实施策略”的作者,该书由InfoQ 出版)总体上相当直率,并断定:“ CRUD 是垃圾”。最近, Nick Malik Jack Van Hoof Udi Dahan 同样在讨论实体服务的问题,而且他们的结论是(来自 Udi 的博客):

“实体服务属于应用架构领域。它们并不是服务的成员,服务是 SOA 分解的基本单元。 一个 SOA 服务既可以使用实体服务实现,也可不使用。如果是,那些实体服务就不能在 SOA 服务边界之外被访问。这样,它们就是 SOA 的实现细节。在这种情况下,我们可以就实体服务优于其它事物(如领域模型模式)的相对价值,进行非常有趣的讨论。”

或者正如 Nick Malik 总结的:

“那么,实体服务是反模式吗?从企业的视角来看,是的。从应用的视角来看,则不是。(两者之间并不冲突)。我认为,这依赖于你站在哪个角度来看。”

尽管如此,仍然还有服务粒度的观点 —— 即使在应用级别。如果服务的粒度太细,就几乎不违反“分布式计算的 8 个谬论”,并且如同 Peter Deutsch 当初定义这些谬论时所说的:

[当你做出错误假定的时候]“所有东西最后被证明是错误的,所有东西导致了麻烦及痛苦的学习经历。”

你有何高见?

查看英文原文 Entity Services - Pattern or Anti-pattern?

2007-06-19 03:451048
用户头像

发布了 255 篇内容, 共 61.0 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

程序员内卷和保持行业竞争力

沃德

程序员 7月月更

手把手带你入门Apache伪静态的配置

迷彩

Apache SEO伪静态 7月月更

更严苛的英特尔Evo 3.0,正在让合作伙伴们上瘾

科技之家

Python 入门指南之Python 简介

海拥(haiyong.site)

Python 7月月更

NFT 交易市场主要使用 ETH 本位进行交易的局面是如何形成的?

NFT Research

区块链 NFT

《2022年中国银行业RPA供应商实力矩阵分析》研究报告正式启动

易观分析

银行用户

什么叫做信息安全?包含哪些内容?与网络安全有什么区别?

行云管家

网络安全 信息安全 数据安全

大疆车载从多家数据库中选定 TDengine 存储海量数据

TDengine

数据库 tdengine 物联网 时序数据库

直播预告|如何借助自动化工具落地DevOps(文末福利)

云智慧AIOps社区

DevOps 云原生 运维开发 自动化构建工具

通过的英特尔Evo 3.0整机认证到底有多难?忆联科技告诉你

科技之家

ACID事务理论

源字节1号

软件开发

激动人心!2022开放原子全球开源峰会报名火热开启!

kk-OSC

开源 开发原子全球开源峰会 开源峰会

leetcode 10. Regular Expression Matching 正则表达式匹配 (困难)

okokabcd

LeetCode 动态规划 数据结构与算法

Spring Cloud源码分析之Eureka篇第二章:注册中心启动类上的注解EnableEurekaServer

程序员欣宸

Java spring SpringCloud 7月月更

【云资源】云资源安全管理用什么软件好?为什么?

行云管家

云计算 安全管理 云资源

webRTC SDP mslabel lable

Boll

WebRTC

spark调优(一):从hql转向代码

怀瑾握瑜的嘉与嘉

spark 7月月更

分类TAB商品流多目标排序模型的演进

得物技术

算法 得物

【Python技能树共建】python urllib 模块

梦想橡皮擦

Python 7月月更

7 大主题、9 位技术大咖!龙蜥大讲堂7月硬核直播预告抢先看,今天见

OpenAnolis小助手

云原生 技术干货 龙蜥大讲堂 7 月预告 精美周边

微帧科技荣获全球云计算大会“云鼎奖”!

微帧Visionular

我们为什么要学习数学建模?

图灵教育

数学 数学建模

IPv6与IPv4的区别 网信办等三部推进IPv6规模部署

郑州埃文科技

ipv6 ipv4 IP地址

百问百答第45期:应用性能探针监测原理-node JS 探针

博睿数据

自动化 博睿数据 性能检测 百问百答 智能运维AIOps

超高效!Swagger-Yapi的秘密

百度Geek说

后端 swagger

OpenHarmony应用开发之Navigation组件详解

坚果

HarmonyOS OpenHarmony 7月月更

Python|数据结构——列表和元组

AXYZdong

7月月更

龙蜥社区第九次运营委员会会议顺利召开

OpenAnolis小助手

阿里云 开源 龙蜥社区 运营委员会 运营代表

《信息系统项目管理师》备考笔记---信息化知识

IT蜗壳-Tango

软考 7月月更 信息系统项目管理师

TDengine 社区问题双周精选 | 第三期

TDengine

数据库 tdengine 时序数据库

CODING DevSecOps 助力金融企业跑出数字加速度

CODING DevOps

研发效能 DevSecOps CODING 代码评审 持续安全交付

实体服务的模式反模式之争_SOA_Arnon Rotem-Gal-Oz_InfoQ精选文章