robertology / todo_or_die
代码腐化致命提醒
Requires
- php: ^8.0
Requires (Dev)
- phan/phan: ^5.4
- phpunit/phpunit: ^9
README
代码腐化致命提醒。
将您的 // @todo
注释替换为更实用的内容。此库将在适当的时候将这些内容置于您面前。是的,“或死亡”意味着 如果条件满足,将抛出异常。
为什么??
我知道你在想什么:为什么有人会故意导致失败?
主要思想是您应该在测试中遇到这些情况,而不是在生产中。但它们 确实 会出现在生产中,没有什么比屁股下面有点火更能让你完成工作了。(但请继续阅读,了解如何不破坏生产)
是的,这有点严厉,但尝试在您的代码库中运行 grep -ri '@todo' . | wc -l
并看看有多少只是在那里被忽视。面对现实,“以后再说”等于永远不会。没有人会查看这些 todo
,您的代码只是在腐烂。
给那些“暂时”和“下个版本”的事情设定一个真实的、可操作的最后期限。
安装
composer require robertology/todo_or_die
对于 PHP 7.4
,安装版本 1,并阅读该版本的 README 以获取使用说明。
(composer require robertology/todo_or_die:^1
)
使用方法
(string $todo_message, bool|Check $check, callable $callable_for_alerting = null)
使用模式
- 死亡
new Todo($todo_message, $check_to_die);
- 警告
new Todo($todo_message, $check_to_alert, $callable_for_alerting);
- 死亡或警告
(new Todo($todo_message, $check_to_die)) ->alertIf($check_to_alert, $callable_for_alerting);
不死亡
通过设置环境变量 TODOORDIE_SKIP_DIE
为一个 truthy
值来确保“或死亡”部分永远不会发生。这将导致仅触发警告。忽略任何死亡条件。(提示:这可能是生产中的明智之举)
putenv('TODOORDIE_SKIP_DIE=1');
警告节流
为了避免饱和您的警报系统,内置了节流功能(仅针对警告,不针对死亡)。每个 Todo
应每小时警报一次。通过设置环境变量 TODOORDIE_ALERT_THRESHOLD
为所需的秒数来更改此设置。通过将其设置为零来禁用节流。
// Once per day putenv('TODOORDIE_ALERT_THRESHOLD=86400');
// Disabled (alert every time) putenv('TODOORDIE_ALERT_THRESHOLD=0');
示例
use Robertology\TodoOrDie\Todo; use Robertology\TodoOrDie\Check\Dates as DateCheck; // Die only new Todo( 'Remove after the old jobs have attritioned out', new DateCheck(strtotime('1 jan 2024')) ); // Alert only // Note the use of fromString() which gives the same result as strtotime() above new Todo( 'Remove after the old jobs have attritioned out', DateCheck::fromString('1 jan 2024'), [$logger, 'warning'] ); // A couple Alerts before we Die (new Todo('Remove after the old jobs have attritioned out', DateCheck::fromString('1 jan 2024'))) ->alertIf(DateCheck::fromString('22 dec 2023'), [$logger, 'warning']) ->alertIf(time() >= strtotime('27 dec 2023'), $my_slack_callable); // ^ the constructor and alertIf() can take a Check object or boolean
备注
-
我在示例中使用了
strtotime()
以提高可读性,但 不要 使用相对日期,如strtotime('+2 months')
,因为它将每次都进行评估,“从现在起两个月后”永远不会到来,因为“现在”一直在移动。 -
警告节流使用放置在 PHP 的临时目录(
sys_get_temp_dir()
)中的文件,这可能会偶尔发生垃圾收集,但很可能会为此工作得很好。 -
名称是从 ruby gem
searls/todo_or_die
(也)无耻地窃取的。 -
向 The Changelog (第 463 集) 致敬,我在那里首次听到这个想法。
个人目标
除了有一个实际工作的工具之外,我还有几个自己对这个项目的目标。
- 全 TDD (测试驱动开发)
- 测试是行为和功能测试的混合,对于这个小项目来说,我对此感到满意。
- 我不关心 100% 的覆盖率,但所有行为都应该有一个测试。
- SOLID "极端化"
- 在得到一个可工作的版本之后,我继续重构,关注 SOLID 原则。
- 这样一个简单的概念可以用一个类来编写,但在这里非常严格是一种很好的练习,用于定义 单一 责任。
许可证
本项目采用MIT许可证进行许可。