Skip to content

简化状态管理 - ISE 开发者博客

Published: at 12:00 AM

简化状态管理 - ISE 开发者博客

摘录

本文提倡将复杂的状态网络简化为与用户期望相关的简单状态。

原文 Simplified State Management - ISE Developer Blog


2024年5月17日

简化连接状态管理

本文介绍了一种架构模式,通过将多个复杂状态汇总为单一状态,大大降低了复杂性和错误,更准确地反映了终端用户的体验。

问题

我们的团队正在开发一个用React编写的接口。该应用程序需要连接到Microsoft Graph API创建订阅,然后使用该订阅的信息连接到SignalR端点接收与订阅相关的消息。听起来足够简单,但我们继承的代码分别管理这些连接(不同的超时策略、重试策略、退避策略,两者之间的状态未协调等)。我们发现,这个看似简单的过程是大多数错误的来源。

如果我们深入分析,就能看出为什么它复杂:

当这些连接各自独立管理时,需要考虑很多边界情况。代码中需要大量逻辑来检查不同状态并决定该做什么。代码复杂度也可能相当高。这就是意外行为的配方。

解决方案

如果我们从用户的角度考虑,他们只需要知道他们是“已连接”(拥有接收消息所需的一切)还是“未连接”(一个或多个条件阻止用户接收消息)。这是一个简化问题,使其更易于理解和编写代码。

Graph API和SignalR连接都有自己的SDK,以及各自的超时、重试和退避策略。我们移除了这些策略,而是将所有代码放入一个频繁运行的连接循环中,以检查连接状态并在必要时采取行动恢复连接。客户端进入循环时处于连接或断开状态,并以连接或断开状态(如上所述)退出循环。如果状态发生变化,客户端会引发或删除“连接错误”条件。

[简化状态管理

优点

设计考虑因素

在设计类似于此的状态管理解决方案时,请考虑以下因素…

总结

这种架构模式对我们非常成功。它大大减少了我们代码的复杂性和我们拥有的错误数量。它提高了透明度(易于阅读的日志)并使得推理代码变得更容易。我们希望你也发现它很有用。