SLIM 2.0中的挂钩与中间件 [英] hooks versus middleware in slim 2.0

查看:17
本文介绍了SLIM 2.0中的挂钩与中间件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

谁能解释一下,选择使用钩子而不是使用中间件来实现身份验证或缓存等功能有什么显著的优点或缺点吗? 例如,我可以通过自定义中间件获取请求对象并设置应用程序语言变量来实现翻译功能,该语言变量可用于在应用程序执行时加载正确的翻译文件。或者,我可以在路由之前添加一个钩子,并读取请求变量,然后在应用程序执行期间加载正确的文件。 有没有什么明显的原因让我错过了一个选择而不是另一个?

推荐答案

超级TL/DR;(非常简短的回答)

首次启动应用程序的某些方面时使用中间件,即在登录确认期间启动路由器、引导过程,并在其他任何地方使用挂钩,即在组件或微服务中使用挂钩。

TL/DR;(简短答案)

中间件当执行顺序很重要时使用。因此,中间件通常在代码的各个方面添加到执行堆栈中(中间件通常在引导期间添加,同时添加记录器、身份验证等。在大多数实现中,每个中间件功能随后决定是否继续执行。

然而,在执行顺序不重要的情况下使用中间件往往会导致错误,其中添加的中间件不会错误地继续执行,或者预期的顺序被打乱,或者有人只是忘记了添加中间件的位置和原因,因为它几乎可以添加到任何地方。这些错误很难追踪到。

钩子通常不知道执行顺序;每个被钩子的函数只是被执行,这就是保证的全部(即,在另一个钩子之后添加一个钩子并不能保证第二个钩子总是第二次执行,只是它将被简单地执行)。执行其任务的选择由函数本身决定(调用状态以停止执行)。大多数人认为这要简单得多,而且移动部件更少,因此从统计上讲,产生的错误更少。然而,要检测它是否应该运行,在钩子中包括额外的状态是很重要的,这样钩子就不会接触到应用程序,并将自己与它本身并不相关的东西耦合在一起(这可以很好地进行推理,但通常更简单)。此外,由于它们的简单性,挂钩往往被添加到特定的命名代码点,从而产生更少的可以存在挂钩的区域(通常是单个位置)。

通常,钩子更易于推理和存储,因为它们的顺序不受保证或考虑。因为钩子可以否定自身,所以钩子在计算上也是等价的,这使得中间件只是一种编码风格或常见问题的速记。

深潜

中间件目前通常被架构师认为是一个糟糕的选择。中间件可能会导致噩梦,调试方面的额外工作很少能超过任何速记。

中间件和钩子(以及混合、分层配置、策略、方面等)都是design pattern类型的战略和方面的一部分。

策略模式可能是最常用的软件设计模式之一,因为每当涉及代码分支时都会调用它们。

了解和使用策略模式可能是检测开发人员技能水平的最简单方法。

只要您需要应用";If...Then";类型的逻辑(可选执行/分支),就会使用策略模式。

在一块软件上进行的计算思维实验越多,在精神上可以减少的分支就越多,然后重构就会消失。这本质上是构建问题的方面代数,或者一遍又一遍地思考正在发生的事情,将程序简化为基本概念/基本原则。在重构时,这些思维实验是架构师花费时间最多的地方;找到共同的方面并减少不必要的复杂性。

降低复杂性的目标是emergence(在系统论术语中,特别是软件,在特殊层中应用配置,而不是首先编写软件)和monads

如果开发人员不小心,单广告往往会将正在执行的操作抽象到可能导致代码执行时间增加的级别。

Monad和Emerging都倾向于将问题抽象出来,以便可以使用基本的构建块来普遍应用这些部分。使用单体(对于小的)和浮现(对于大的),任何复杂的软件在理论上都可以用尽可能少的部件来构建。

毕竟,在重构中,最容易维护的代码是不再存在的代码。

函数和映射函数

继续降低复杂性的一个好方法是应用函数器和映射函数。函数器通常也是实现分支并让编译器深入了解问题的最快方法,这样它就可以以最好的方式进行优化。它们也非常易于推理和维护,因此将您的工作放在一边,使用部分重构的应用程序提交更改几乎没有什么坏处。

函数器的名字来源于数学(特别是范畴理论,在范畴理论中,它们指的是在两个集合之间映射的函数)。然而,在计算中,函数器通常只是以这样或那样的方式映射问题空间的对象。

在计算机科学中,什么是函数器,什么不是函数器,这方面有很大的争论,但为了与定义保持一致,您只需关注解决问题的行为,并使用函数器作为临时思维支架,允许您将问题抽象,直到它变成配置或实现的因素,而不是代码。

这篇关于SLIM 2.0中的挂钩与中间件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆