文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

架构设计原则:SPI 与 API 该如何选择?

2024-11-29 19:06

关注

从面向接口编程说起

图片

我们在“调用方”和“实现方”之间引入了“接口”,上图没有给出“接口”应该位于哪个“包”中,从纯粹的可能性上考虑,我们有三种选择:

下面让我们依次分析这三种可能性,如果现实中确实有这种可能性,不如我们就为其起个名字以方便交流。

“接口”位于“调用方”所在的“包”中

我们先想象一个场景,以仓储的接口为例:

图片

我们将“仓储接口”放置于“领域层”这个“包”中,实现放在一个独立的“包”中,我们看DDD大师的实现都是这样子,现在来思考一下为什么这么做。

“领域层”的“领域服务”会依赖“仓储接口”,“仓储接口”也会依赖“聚合根”,这两者都是除了“实现依赖”之外的依赖关系,如果将“接口”放到“仓储实现”中就丧失了面向接口编程的意义(编译也不会通过),如果放到“独立层”中呢?会编译不通过,出现双向依赖了。

对于类似这种情况下接口,我们将其称为“SPI”,全称为:service provider interface,“SPI”的规则如下:

  1. 概念上更依赖调用方。
  2. 组织上位于调用方所在的包中。
  3. 实现位于独立的包中。
  4. 常见的例子是:插件模式的插件。

“接口”位于“实现方”所在的“包”中

我们先想象一个场景,以Unity提供的IUnityContainer接口为例,除了维护这个框架的团队之外,我们没有发现谁实现了这个接口,虽然理论上是可以实现这个接口的(如果能实现的话,我们何不自己弄额Ioc容器呢?)。

对于类似这种情况下的接口,我们将其称作为“API”,“API”的规则如下:

  1. 概念上更接近实现方。
  2. 组织上位于实现方所在的包中。
  3. 实现和接口在一个包中。

“接口”位于独立的“包”中

这里就不说场景了,如果一个“接口”在一个上下文是“API”,在另一个上下文是“SPI”,那么你就可以这么组织。

需要注意的事项

不管是 SPI 或 API,接口都是可以组织到独立的“包”中,这么做是否有意义,自己来做出决定了。

SPI 和 API 也不一定是接口,我这里都是指狭义的具体的接口。

场景图

图片

每一次思考都伴随着收获,也离不开和朋友们的交流,天更蓝了。

SPI 接口

  1. 定义:SPI 是一种服务提供者接口,它允许在运行时加载不同的服务实现。
  2. 使用场景:

模块化设计:当系统需要高度模块化,且希望将核心功能与具体实现分离时。

可插拔架构:需要支持多种服务实现,并且可以在不修改代码的情况下替换或增加新的服务实现。

服务发现:在运行时根据配置或服务注册表动态发现和加载服务。

微服务架构:在微服务架构中,SPI 可用于服务间的动态交互和集成。

  1. 优点:

API 接口

  1. 定义:API 是一组预定义的函数、协议和工具,用于构建软件应用,它定义了软件组件之间交互的契约。
  2. 使用场景:

客户端和服务器交互:当需要设计客户端和服务器之间的通信协议时。

库和框架:提供给开发者使用的库或框架的公共接口。

第三方集成:需要与第三方系统或服务进行集成。

内部组件通信:在大型系统中,不同组件或模块之间的交互。

  1. 优点:

如何选择?

选择使用 SPI 还是 API 的考虑因素:

架构是“取舍”,而非“银弹”。

来源:架构精进之路内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯