这个 API 设计模式有名字吗?

Posted

技术标签:

【中文标题】这个 API 设计模式有名字吗?【英文标题】:Does this API design pattern have a name? 【发布时间】:2021-06-18 02:51:45 【问题描述】:

jQuery 和 MathBox 都具有查询函数($()select()),它们返回带有附加方法的对象,这些方法作用于所有查询的实体。例如。 $().addClass().

这个模式有名字吗?

【问题讨论】:

我听说过 jQuery being called a monad 的行为。 但我猜,你的意思只是所谓的“包装器”。 现在我要进入 FP 兔子洞了 【参考方案1】:

我一直听说 jQuery API 风格被称为“Fluent API”,或者如 Wikipedia 所说:“Fluent Interface”。

查看https://en.wikipedia.org/wiki/Fluent_interface#javascript

但是,它主要是关于链接方法,通常用于构建查询或转换链。这些方法的作用以及它们如何作用于所处理的实体取决于应用程序域。

对于 jQuery,它类似于复合模式:一个动作可以透明地应用于单个实体或它们的集合,使用相同的接口。与经典 Composite 设计模式的不同之处在于,我们不是在谈论纯粹的 OOP,而是在谈论更接近函数式编程的东西,其中返回的值总是转发 API,尽管带有新的状态。

查看https://en.wikipedia.org/wiki/Composite_pattern

【讨论】:

【参考方案2】:

它被称为Higher Order function。

高阶函数是在执行时返回函数、将函数作为一个或多个参数或两者兼有的任何函数。如果您使用过任何 Array 方法,例如 map 或 filter,或者将回调函数传递给 jQuery 的 $.get,那么您已经使用过高阶函数。

ref

【讨论】:

我认为这不适用于 jQuery 函数 itself 至少——它返回一个带有附加函数的对象,而不是直接函数。 jQuery 函数返回一个附加了函数的对象。所以它并不真正符合高阶函数的定义。

以上是关于这个 API 设计模式有名字吗?的主要内容,如果未能解决你的问题,请参考以下文章

这是众所周知的设计模式吗?它叫啥名字?

图解设计模式 读书笔记

API网关模式和BFF有区别吗?

RESTful API 应该有模式吗?

这种隐藏类的方法是什么?

API 设计:我可以阻止用户进行极慢的查询吗?