【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

  • 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:45801
用户头像

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

关注

评论

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

大数据培训班如何选

小谷哥

电烙铁的基础知识

单宝华

电子技术 8月月更

「全球数字经济大会」登陆 N 世界,融云提供通信云服务支持

融云 RongCloud

isc N世界

KunlunBase 1.0 发布了!

KunlunBase昆仑数据库

国产数据库

CWE4.8:2022年危害最大的25种软件安全问题

华为云开发者联盟

安全 后端 开发

搭建属于自己的知识库(Wikijs)

开源 wiki 知识库 8月月更

用 Lunchbox 在 vue3 中创建一个旋转的 3D 地球竟是如此简单

前端修罗场

3D 地球 ThreeJS

大数据培训机构大概要花费多少钱

小谷哥

开源一夏 | Python Web开发(八):后端开发中的增查改删处理

是Dream呀

开源

百问百答第49期:极客有约——国内可观测领域SaaS产品的发展前景

博睿数据

可观测性 智能运维 博睿数据 极客有约 中信证券

天翼云4.0分布式云赋能千行百业数字化转型

天翼云开发者社区

云存储 云上架构

融云「 IM 进阶实战高手课」系列直播上线

融云 RongCloud

IM 连接协议

创新云集技术咖,工赋汇聚实战派:2022工赋开发者峰会

工赋开发者社区

工业 峰会

安全至上:落地DevSecOps最佳实践你不得不知道的工具

龙智—DevSecOps解决方案

DevOps DevSecOps

全面认识二极管,一篇文章就够了

矜辰所致

ESD二极管 8月月更 二极管 电子设计基础 TVS二极管

一文搞懂│php 中的 DI 依赖注入

设计模式 依赖注入 8月月更 高级编程

A tour of gRPC:06 - gRPC client straming 客户端流

BUG侦探

gRPC RPC

制胜精细化运营时代 华为应用市场打出内容、场景、商业运营组合拳

Geek_2d6073

Redis进阶之路:深度解析Redis单线程架构,图文并茂不能再清晰了

王小凡

Java redis 程序员 开发

数字孪生园区场景中的坐标知识

ThingJS数字孪生引擎

数字孪生

开源一夏|数据结构课设:基于字符串模式匹配算法的病毒感染检测问题

是Dream呀

开源

开源一夏 | 数据结构课设:图书信息管理--顺序存储和链式存储

是Dream呀

开源

我用这一招让团队的开发效率提升了 100%!

Liam

程序员 前端 后端 开发 API

大数据培训如何部署一个健壮的Airflow

小谷哥

Python 教程之输入输出(2)—— 输入和输出

海拥(haiyong.site)

Python 8月月更

参加前端培训后程序员能找到工作吗?

小谷哥

研发了 5 年的时序数据库,到底要解决什么问题?

TDengine

数据库 tdengine

不改一行源码,实现 sentinel-dashboard 所有配置支持 apollo 持久化

铁匠

微服务 sentinel 流量控制 sentinel dashboard

学好web前端培训课程方法推荐

小谷哥

什么是SVN(Subversion)?

龙智—DevSecOps解决方案

svn 版本控制 版本管理 版本控制软件

玩转云端 | 天翼云对象存储ZOS高可用的关键技术揭秘

天翼云开发者社区

云平台 云存储

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