此代码是否违反SRP原则?

function sendError(error) {
    log(error);
    response.status(500).send(error.message);
}

最佳答案

简短的答案是肯定的。

SRP指出,一起改变的行为应该共存。

日志记录是跨 Realm 的关注点(系统范围的关注点),这意味着它是适用于整个应用程序的功能。

在您的函数中,日志记录可能适用,并且不会随着SRP一起更改而中断SRP,但是可以改善我们处理交叉问题的方式。

处理日志的方式将在很大程度上取决于您所使用的框架。原则仍然保持不变。基本规则如下:

1-您想在一个中心位置而不是整个应用程序中进行登录。

2-您想尽早 throw ,并尽早捕获。 (这给您留下了很大的堆栈痕迹,可帮助您找出问题所在。)

为此,最常见的解决方案是使用中间件。 Express之类的库允许这样做。您的自定义中间件可以在最后可能的时刻捕获异常并记录所有未处理的异常。

横切关注点应谨慎处理,因为它们很容易膨胀和破坏代码。

有关此主题的更多信息,您可以阅读有关横切关注点和面向方面的编程的信息。

让我知道是否有什么我需要进一步澄清的。 :)

10-04 22:21