当前位置: 首页 > news >正文

[架构模式实践]如何不让第三方服务/组件的故障阻碍开发和测试进度

今天起床后发现阳光明媚. 平日里钻在暗无天日的办公室里, 是没有机会体会到这冬日正午的暖阳, 是多么的让人流连.

靠在床头, 伸了个懒腰, 慵懒地捧起了一直无暇去读的企业应用架构模式. 那一刻, 阳光照在书本上, 虽然有些晃眼, 但是不妨碍一种细小的满足感默默诞生.

前日和一名同事闲聊, 提到了一段时间来一起参与的一个项目, 这个项目的一个特点是用到了数量较多形式各异的第三方接口, 算是"传说中的"企业级应用吧:) 在前面的一轮测试过程中, 由于其中一些接口的测试环境频频当机或服务中断, 导致测试和修改bug的过程都耽搁了不少时间, 于是同事提议, 做一些这些接口的替代品, 来在开发和测试的某些阶段, 取代对第三方接口的测试环境的依赖.

因为这次谈话还未从大脑中完全溜走, 于是我琢磨着在书中找一些相关的内容. 先是找到了Chapter 18 Base Patterns, 第一节Gateway, 即是讲, 对待一些第三方服务和资源, 应该以Gateway 模式将其封装. 书中举了将向消息队列中发送具体的业务消息的例子, 旨在阐明Gateway 模式带来了简化调用, 明确调用的好处.

所谓简化调用, 因为服务/资源的使用者无需关心原始API的细节, 一律以一种统一的, 够用为原则的API来访问一类服务/资源, 如XML, 如关系数据库, 以及各种消息中间件, 等等.

所谓明确调用, 以发送消息到消息队列为例, 一般消息队列中间件的API, 为了提供通用性, 通常接口足够抽象, 接口本身不包含任何特定的业务含义和指示. 但对于调用发送消息API的使用者, 一个具备明确示意的方法名, 一些类型化, 数量明确的方法参数, 进而在方法中针对传入参数做范围检查的方法, 确实提供了一种更好的编程体验, 既有利于在开发阶段快速选择适合的方法, 也有利于进行单元测试, 一如示例中提及的 sendConfirmation(id, amount, symbol).

因为Gateway模式将服务/资源的提供方和使用方进行了解耦, 因此可用于在开发/测试的某些阶段, 绕开对第三方接口测试环境的依赖. 为了实现此目的, 同样出现在Chapter 18中的 Service Stub模式, 有了用武之地.

在下周的工作中, 我会花一些时间, 将目前系统中使用的第三方接口进行分类, 为不同类型的接口寻找适合的Stub方式. 因此进一步关于Service Stub模式的介绍, 我希望在经过自己一些实践之后, 能总结出多一点价值的东西, 再来成文.

转载于:https://www.cnblogs.com/yicone/archive/2010/01/18/1650288.html

相关文章:

  • RedHat AS4 下安装基于bind的DNS服务器
  • nd5sum
  • jqueryeditable plugin
  • 迷望的人生
  • lftp使用简介
  • 用SQL存储过程将数据导出到Excel
  • 不使用反射的实体类方案
  • ASP删除文章时,需要删除eWebEditor上传文件
  • USB移动硬盘WinPE启动盘的制作
  • debain下装memcached
  • cto开博第一篇--迎接21世纪的第一个虎年
  • ftp服务器的架设
  • Moq测试基础说谈(二)——Mock方法,方法参数
  • 【3.15维权专题】我被骗的前前后后,得出的准则
  • [原创]SQL Server 2005的TCP/IP协议默认是“禁用”
  • [PHP内核探索]PHP中的哈希表
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • chrome扩展demo1-小时钟
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • java第三方包学习之lombok
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • OSS Web直传 (文件图片)
  • Otto开发初探——微服务依赖管理新利器
  • React-flux杂记
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Vue学习第二天
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 从零开始在ubuntu上搭建node开发环境
  • 诡异!React stopPropagation失灵
  • 将回调地狱按在地上摩擦的Promise
  • 聊一聊前端的监控
  • 马上搞懂 GeoJSON
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 以太坊客户端Geth命令参数详解
  • 用Python写一份独特的元宵节祝福
  • 智能合约开发环境搭建及Hello World合约
  • 阿里云服务器如何修改远程端口?
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​学习一下,什么是预包装食品?​
  • #laravel 通过手动安装依赖PHPExcel#
  • #LLM入门|Prompt#3.3_存储_Memory
  • $GOPATH/go.mod exists but should not goland
  • (7)STL算法之交换赋值
  • (C语言)二分查找 超详细
  • (Java数据结构)ArrayList
  • (LeetCode C++)盛最多水的容器
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (八)Spring源码解析:Spring MVC
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (十八)三元表达式和列表解析
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • ******之网络***——物理***