AICon议程上新60%,阿里国际、360智脑、科大讯飞、蔚来汽车分享大模型探索与实践 了解详情
写点什么

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

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

关注

评论

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

一分钟了解JAVA语言

高端章鱼哥

一文趣谈Docker与低代码:软件开发的新风尚

快乐非自愿限量之名

Docker 软件开发 低代码 容器化

初探 Cocos Creator: 碰撞与物理系统

北桥苏

游戏开发 游戏引擎 小游戏 CocosCreator

高性能网络SIG月度动态:virtio 支持 RSS 功能!virtio 标准委员会正式接受 SIG 提案

OpenAnolis小助手

龙蜥 龙蜥社区SIG 月度动态

Alibaba Cloud Linux 与倚天软硬结合,加速数据智能创新

OpenAnolis小助手

AI 龙蜥社区 Alibaba Cloud Linux

解密通义灵码:软件研发工具的“大脑”

阿里巴巴云原生

阿里云 云原生

通过ETL工具快速实现单据同步

RestCloud

数据同步 ETL 数据集成

基础设施SIG月度动态:社区官网 SIG 增加轻量级 PR 支持,CVECenter 上线漏洞认领功能

OpenAnolis小助手

龙蜥社区 龙蜥社区SIG 月度动态

2024盘点:除了Redmine,还有哪些不错的项目管理工具

爱吃小舅的鱼

项目管理 项目管理工具 Redmine

Rust Rocket简单入门

快乐非自愿限量之名

rust 后端 开发语言

直播预告|Sora 会怎样驱动视频编解码领域的突破与革新

声网

英特尔助力龙蜥加速 AI 应用及 LLM 性能

OpenAnolis小助手

AI 英特尔 龙蜥社区 2023龙蜥操作系统大会

龙蜥开发者说:一个人出发,一群人抵达 | 第 26 期

OpenAnolis小助手

龙蜥社区 龙蜥开发者说

项目经理的职业素养:从执行到战略的五级跃升

凌晞

项目管理 项目经理

mj ai作画是什么?5款中文版Midjourney软件推荐!

彭宏豪95

人工智能 在线白板 AIGC AI绘画 MidJourney

提升Java编程安全性-代码加密混淆工具的重要性和应用

叫好不叫座?Arm、英特尔、AMD 等 5 位技术大咖畅聊机密计算技术

OpenAnolis小助手

龙蜥社区 龙蜥操作系统 机密计算 2023龙蜥操作系统大会

云原生时代下,操作系统生态的挑战与机遇

OpenAnolis小助手

云原生 操作系统 国产操作系统 龙蜥社区 2023龙蜥操作系统大会

外贸独立站怎么搭建?

九凌网络

数据库与低代码:重塑软件开发的新范式

不在线第一只蜗牛

数据库 低代码 数据可视化

智启未来:TinyEngine 低代码引擎版本更新,畅享升级体验

OpenTiny社区

开源 前端 低代码 web开发

浅谈前端路由原理hash和history

高端章鱼哥

一文读懂Partisia区块链的MOCCA 方案:让资产管理可信且可编程

大瞿科技

创新奋进,共筑国产基础软硬件的美好未来 | 2023 龙蜥操作系统大会

OpenAnolis小助手

操作系统 国产操作系统 龙蜥社区 龙芯中科

开放签开源电子签章产品白皮书(简版)

开放签开源电子签章

开源 电子签章

龙蜥社区衍生版浪潮信息 KOS 升级!支持最新 5.10 内核,让大模型“开箱即用”

OpenAnolis小助手

龙蜥操作系统 龙蜥社区衍生版

2023 re:Invent | Amazon Q 与 Amazon CodeWhisperer 面向企业开发者提效利器

亚马逊云科技 (Amazon Web Services)

Apache Flink 中 Watermark 机制详解及其核心原理与应用示例

木南曌

flink 实时计算 watermark

开箱即用的使用体验!Alibaba Cloud Linux 的演进之旅

OpenAnolis小助手

Alibaba Cloud Linux 龙蜥操作系统大会

SysOM 的可观测和智能监控实践

OpenAnolis小助手

系统运维 龙蜥社区 龙蜥操作系统 SysOM 2023龙蜥操作系统大会

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