单一职责原则——功能

Single responsibility principle - function

我正在阅读一些关于 SOLID 编程的文章,我正在尝试重构我的测试项目以实现其中的一些规则。

我经常对 SingleResponsibilityPrinciple 有疑问,所以我希望有人能帮助我。

据我了解,SRP 意味着(在函数的情况下)函数应该只负责一件事。这看起来非常容易和简单,但我确实陷入了做更多事情的陷阱。

这是简化的示例:

class TicketService {

    private ticket;

    getTicket() {

        httpClient.get().then(function(response) {
            ticket = response.ticket;
            emit(ticket);  <----------------------
        });
    }

}

令人困惑的部分是emit(ticket)。所以,我的函数被命名为 getTicket,这正是我在那里所做的(例如从服务器获取它),但另一方面,我需要将更改发送到我的应用程序的所有其他部分,并让他们知道机票已更改。

我可以创建单独的 set() 函数,在那里我可以设置私有变量,并在那里发出它,但这似乎是一回事。

这是错误的吗?它违反规则吗?你会如何解决它?

这可能会导致意外行为。如果我想在未来重新使用你的 class 并且我在我的 IDE 方法 getTicket() 中看到自动完成,我希望得到一个 Ticket.

然而,将此方法重命名为 mailChangedTicket,理想情况下,您希望此方法调用 getTicket 方法(实际上是 returns 票证),这样您就有了可重用的代码这将更有意义。

您可以使 SRP 走得更远,例如您的 TicketService 有一个 httpClient,但票据的来源可能无关紧要。为了 'fix' 这个,你必须创建一个单独的界面和 class 为此。

几个优点:

  • 代码的可重用性越来越高
  • 单独测试零件更容易

我可以推荐 Robert C. Martin 的书 'Clean Code',其中提供了实现此目标的一些很好的指南。

您还可以 return 来自 getTicket() 函数的票证,然后有一个名为 setUpdatedTicket() 的单独函数,它获取票证并设置私有参数,最后调用 emit 函数.