【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

SOA 语法——服务 (Services) 是动词还是名词?

  • 2009-10-22
  • 本文字数:1562 字

    阅读完需:约 5 分钟

Jason Bloomberg 的最新文章——服务 (Services) 是动词还是名词?——讨论了服务 (Services) 是应该表示动词还是名词:

你可以设计服务为实体服务 (Entity Services) 或任务服务(Task Services),前者自然表示业务实体,后者则代表实现过程中的某些专门的步骤的动作,换句话说,就是动词。那哪种方式更好呢?

为了说明“名词”和“动词”类型的服务的差别,Jason 如下使用了一个批准待办保险单的服务例子

……根据面向对象的方式,我们有一个保险单的对象,它可以支持一些操作,包括如下伪代码中的批准保险单操作: myPolicy = new Policy (); … successOrFailure = myPolicy.approve ();

……你当然也可以创建一个和上面代码差不多的带批准操作的实体服务:Policy 服务,但最大的不同点在于服务是无状态的,你不能实例化他们,因此如下代表了实现同样的功能,一个实体服务怎么做:

请求创建保险单,指定创建操作–> 保险单服务–> 响应返回保险单号码 12345

请求批准保险单 12345,指定批准操作–> 保险单服–> 响应返回成功或失败

尽管这是一个典型的面向对象思想的设计服务的方式,Jason 指出:

……另外一种实现相同功能的方式是使用如下的任务服务 (Task Services),在这里服务代表动词而不是名词: 请求创建保险单–> 创建保险单的服务–> 响应返回保险单号码 12345

请求批准保险单 12345–> 批准保险单的服务–> 响应返回成功或失败

在这个例子中,两个任务服务 (Task Services) 没有任何操作,它们更像是实现了服务中上下文的功能。但是,一个批准服务除了批准保险单还会做什么呢?

Jason 的观点是:

实体和任务服务既能帮助架构师们把以往的功能连接起来,并且也能够灵活的处理需求。实体服务(Entity Services)直接抽象出遗留(legacy)功能,任务服务(Task Services)则把基本实体服务的单个操作抽象出来,过程服务(Process Services)通常是由任务服务组成的。或者说,过程服务是基于服务导向的商业应用(SOBA)的接口,如果这些应用由设计正确的任务服务组成,他们将会展现出其过程的本质。

Jason 在结尾的时候说

事情常常是这样的,架构师们处理时往往有好几个选择,并且对于每个选择是否恰当往往取决于业务本身的问题, 一个典型的例子就是“选择合适的工具” 的理论,如果这个业务问题是过程为中心的,比如为了提高效率或优化订单保险过程,那么用任务服务的组合来实现基于服务导向的商业应用 (SOBAs) 将会带来更大灵活性。如果是信息为中心的业务问题,比如在呼叫中心的推销员的屏幕上显示整理过的客户信息的例子,架构师可能会更关注实体服务(Entity Service)因为推销员往往正在处理某个特定的客户,而且必须要能够和客户灵活地交流。

尽管 Jason(好几次)在文章中希望说明 SOA 和 OO 的不同,本篇更多地证明了面向对象的思想是如何影响我们理解 SOA 理解的。 让我们回到 Wikipedia 上的定义

  • 名词:格变化中的一部分,标志着一个具体或抽象的实体。
  • 动词:没有格变化,但是会因为时态,人称,数的影响而变化,标志一个活动,执行的过程或经历

根据 Jason 的解释,“服务是固有无状态的” ,他们不能代表一个实体,在他的例子中,一个保险单服务并不是一个实体服务,而是一组支持任何保险单上的操作的方法集合。这类似于J2EE 的无状态会话Bean,几乎不能被叫做名词,因此,最后得出,服务并不是一个名词,它是一个动词或一组动词的集合,Jason 所谓的实体和任务服务的不同在于他们提供的方法个数。

查看英文原文: SOA Grammar – Are Services Verbs or Nouns? - - - - - -

译者介绍:晁晓娟,从事 Web 开发管理多年,留过学,呆过外企,尝试过创业,关注项目管理,架构和产品,热爱天马行空的把所有的传统的非传统的 IDEA 搬到互联网上来。InfoQ 中文站内容团队,尤其是架构、SOA 和 Ruby 社区需要您的参与,有意者请邮件至 editors【AT】cn.infoq.com

2009-10-22 06:512645
用户头像

发布了 42 篇内容, 共 17.1 次阅读, 收获喜欢 4 次。

关注

评论

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

10Wqps 超高并发 API网关 架构演进之路

Java你猿哥

Java 架构 微服务 SSM框架 api 网关

阿里云IoT物联网平台基础版和高级版数据进入规则引擎的流转详解——普及类

阿里云AIoT

物联网

智维数据荣获2022金融科技应用创新奖

智维数据

金融科技 智能运维 金融电子化 智维数据

NutUI-React 京东移动端组件库 2月份上新!欢迎使用!

京东科技开发者

前端 React 组件库 开源组件 企业号 3 月 PK 榜

flomo 浮墨笔记向飞书收购 “幕布”,不卖永久会员、不融资的“反骨”逻辑

B Impact

用图技术搞定附近好友、时空交集等 7 个典型社交网络应用

NebulaGraph

推荐算法 图数据库 社交网络

阿里云IoT物模型-属性,服务,事件通信的topic和payload详解——设备管理运维类

阿里云AIoT

物联网

【低代码实践】京东科技活动平台:魔笛介绍

京东科技开发者

低代码 企业号 3 月 PK 榜 活动平台

真香!腾讯T4梳理的Java核心宝典(框架+原理+笔记+导图)

做梦都在改BUG

Java 程序员

依靠这份PDF面试资料文档,各种美团,阿里等大厂offer拿到手软

Java你猿哥

Java 后端 ssm 面经 八股文

Serverless:基于个性化服务画像的弹性伸缩实践

百度Geek说

云原生 成本优化 Servelress 弹性伸缩 企业号 3 月 PK 榜

聚势启新,赢未来!网银互联通航云计算数据中心三期盛大落地!

科技热闻

好用的油猴Safari浏览器插件:Tampermonkey 中文版

真大的脸盆

Mac 油猴 油猴插件 脚本管理 脚本插件

阿里云助力元戎启行 加速自动驾驶应用落地

云布道师

自动驾驶 阿里云 弹性计算

高效稳定的通用增量 Checkpoint 详解之二:性能分析评估

Apache Flink

大数据 flink 实时计算

太强了!阿里架构师把自己会的都总结到了这份1737页实战开发手册中

做梦都在改BUG

Java

Selenium自动化测试

测吧(北京)科技有限公司

测试

时序数据库的流计算支持

KaiwuDB

流计算 时序数据库 KaiwuDB

谷歌Android things物联网硬件接入阿里云IoT物联网套件实战——设备接入类

阿里云AIoT

物联网 传感器 Android开发

难以置信!四面斩获字节offer,全靠这份“算法最优解”宝典

做梦都在改BUG

Java 数据结构 面试 算法 LeetCode

基于Pub/Sub模式的阿里云IoT同步调用详解——设备管理运维类

阿里云AIoT

物联网 API

华为云GaussDB以技术创新引领金融行业分布式转型

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

数字音频编辑|Cockos REAPER最新破解教程

魔仙苹果mac堡

Cockos Reaper破解 音频编辑

从 3 个层级出发,做好 DevSecOps“安全左移”经济账

极狐GitLab

DevOps DevSecOps 代码安全 极狐GitLab 安全左移

经过阿里四面而形成的10万字java面试题及答案文档到底有多牛?

Java你猿哥

Java 阿里巴巴 后端 面经 八股文

通过HTTP/2通道实时获取IoT设备状态和数据——设备管理运维类

阿里云AIoT

Java 物联网

项目经理问我Tomcat 与 Undertow 怎么抉择?此文教她选

Java你猿哥

Java jdk Spring Boot ssm

国内首发|焱融科技 YRCloudFile 支持 NVIDIA GPUDirect Storage(GDS)

焱融科技

人工智能 分布式存储 分布式文件存储 全闪存储 GPT-4

面试官:还有比Redis更骚的分布式锁的实现方式吗?

做梦都在改BUG

Java Spring Boot 分布式锁 etcd

系统架构设计:进程缓存和缓存服务,如何抉择?

做梦都在改BUG

Java 架构设计 缓存服务 进程缓存

浅析synchronized底层实现与锁升级过程

做梦都在改BUG

Java JVM synchronized

SOA语法——服务(Services) 是动词还是名词?_SOA_Boris Lublinsky_InfoQ精选文章