代码之家  ›  专栏  ›  技术社区  ›  Serhii Shliakhov

如果函数将错误记录在主要用途之上,是否违反了SRP?

  •  3
  • Serhii Shliakhov  · 技术社区  · 7 年前

    此代码是否违反SRP原则?

    function sendError(error) {
        log(error);
        response.status(500).send(error.message);
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Marcel-Is-Hier    7 年前

    简而言之,答案是肯定的,在一定程度上。

    SRP指出,共同改变的行为应该共同存在。

    日志记录是一个贯穿各领域的问题(系统范围的问题),这意味着它的功能适用于整个应用程序。

    在您的功能中,日志记录可能是适用的,并且不会随着SRP一起变化而破坏它,但是我们处理这个交叉问题的方式可以得到改进。

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

    1-您希望在一个中心位置进行日志记录,而不是整个应用程序。

    2-你要尽可能早地投球,尽可能晚地接球。(这会给你留下一个大的堆栈跟踪,帮助你找出哪里出了问题。)

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

    交叉关注点应该小心管理,因为它们很容易膨胀和破坏代码。

    对于这个主题的额外阅读,你可以阅读横切关注点和面向方面编程。

    如果有什么需要我进一步澄清的,请告诉我。:)