linuscash/with-global-state

以简单的方式使全局状态变得清晰,以便将其重新控制

v1.0.0 2018-08-27 09:05 UTC

This package is not auto-updated.

Last update: 2024-09-29 05:27:55 UTC


README

withGlobalState 是一个简单的工具,它将任何函数封装起来,以便清楚地展示其全局状态需求。

动机

最近在开发一个应用时,我发现其中大部分都共享全局状态。我想集中精力解开共享状态的模块,但又不想全面大改,陷入困境。因此,这个小巧的函数应运而生。我在重构模块的同时使用它来掌握每个模块的全局状态,而不会干扰其他模块。

示例

function greetMe (String $moniker): String
{
    return "Hello {$moniker} my name is {$GLOBALS['name']}";
}

greetMe('stranger'); // ??

$linusGreetMe = withGlobalState('greetMe', ['name' => 'Linus']);
$linusGreetMe('stranger'); // "Hello stranger my name is Linus"

上面的示例虽然有些牵强,但确实展示了函数的目的。我们可以看到,一个实现不佳且依赖全局状态的函数,在通过全局状态管理后,变得更加易于阅读、管理和测试。

本质上,我们可以对这个遗留代码编写测试。一旦掌握了它,我们就可以将其重构为更具有意义和可维护性的代码,而不会影响其他模块。