写点什么

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

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

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

关注

评论

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

Linux常用命令分享:有手就会,但能解决95%以上的问题

优麒麟

Linux 开源 计算机 优麒麟

NetCore性能排查

神农写代码

Echarts 折线图完全配置指南 - 手把手教你设置 Echarts 折线图详细教程

蒋川

Vue eCharts

想做好分布式架构?这个知识点一定要理解透!

博文视点Broadview

Spark的job、stage和task的机制论述

编程江湖

【躲过裁员,成功上岸】发现小公司有不好的苗头,赶紧学习!

小傅哥

面试 小傅哥 中间件 项目

看完微信抢红包算法你就明白,为啥你不是手气最佳

华为云开发者联盟

算法 微信红包 手气最佳 剩余金额随机法 割线法

给工厂做开发,竟然喝着咖啡听“交响”?

阿里云云效

云计算 阿里云 DevOps 研发 研发提效

四大功能!带你初识 Fabric | 容器网络系列第2期

BoCloud博云

云原生 容器网络方案

CPU的“花招”已耍完?无指令集架构颠覆旧套路

OneFlow

人工智能 机器学习 深度学习 英伟达 芯片

OpenHarmony标准设备应用开发(一)——HelloWorld

OpenHarmony开发者

Hello World ! OpenHarmony 标准设备

安利一个小众但实用的导航网站(推荐收藏)

小炮

导航网站

还搞不明白,一次性给你总结好网络层概念

华为云开发者联盟

网络协议 IP 网络层 组网

TDengine 和 InfluxDB 查询性能对比测试报告

TDengine

数据库 tdengine

助力数字经济 明源云助力不动产行业打造数字新引擎

科技热闻

在 Rainbond 中一键安装高可用 Nacos 集群

北京好雨科技有限公司

开源 Kubernetes nacos PaaS rainbond

FabEdge V0.5.0 新特性:支持跨集群服务访问

BoCloud博云

开源 边缘计算 cncf

【Git教程】Git最全使用指南

阿里云云效

git 云计算 阿里云 DevOps Codeup

成为 DevOps 工程师需要具备哪些能力?

飞算JavaAI开发助手

vivo 商品中台的可视化微前端实践

vivo互联网技术

可视化 前端特效

web前端技术Mongoose详解

编程江湖

AppCube快速开发问卷调查应用在WeLink发布上线

DS小龙哥

3月月更

华为云GaussDB专家走进课堂,跟莘莘学子聊聊数据库

华为云开发者联盟

数据库 人才培养 华为云 GaussDB 华为云数据库

提高企业产品交付效率系列(1)—— 企业应用一键安装和升级

北京好雨科技有限公司

Kubernetes PaaS rainbond

行业分析| 音视频呼叫邀请适用于多领域

anyRTC开发者

音视频 WebRTC 语音通话 视频通话 呼叫邀请

TDengine 在智慧矿山系统中的应用

TDengine

摩尔定律的现在及未来

科技新消息

Apache Impala架构解析及与Hive、SparkSQL的性能比较

编程江湖

java培训-Redis 原理与知识总结分享 不愁面试

@零度

redis JAVA开发

提效24.3%!看OA预算管理系统的低代码开发实践

鲸品堂

低代码开发

Video.js 使用教程 - 手把手教你基于 Vue 搭建 HTML 5 视频播放器

蒋川

Vue video.js

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