单一职责原则——功能
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 函数.
我正在阅读一些关于 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 函数.