我正在阅读有关SOLID编程的一些内容,并且我正在尝试重构我的测试项目以实现其中一些规则。
我经常怀疑SingleResponsibilityPrinciple,所以我希望有人可以帮助我。
据我所知,SRP意味着(在函数的情况下),函数应该只负责一件事。而这似乎很容易和简单,但我确实陷入了做多事情的陷阱。
这是一个简化的例子:
Y
令人困惑的部分是class TicketService {
private ticket;
getTicket() {
httpClient.get().then(function(response) {
ticket = response.ticket;
emit(ticket); <----------------------
});
}
}
。所以,我的函数名为emit(ticket)
,这正是我在那里做的(例如从服务器获取),但另一方面,我需要将更改发送到所有其他部分我的应用程序,让他们知道故障单已更改。
我可以创建单独的getTicket
函数,在那里我可以设置私有变量,并在那里发出它,但这看起来是一回事。
这是错的吗?它违反了规则吗?你会如何解决它?
答案 0 :(得分:1)
你也可以从getTicket()函数返回票证,然后有一个名为setUpdatedTicket()的单独函数,它接受票证并设置私有参数,最后调用emit函数。
答案 1 :(得分:0)
这可能会导致意外行为。如果我希望将来重新使用您的课程,我会在IDE中看到自动完成方法getTicket()
我希望获得Ticket
。
然而,将此方法重命名为mailChangedTicket
,理想情况下,您希望此方法调用getTicket
方法(实际上返回票证),这样您就可以使用可重复使用的代码,这将更有意义。
你可以把SRP拿得很远,例如你的TicketService
有一个httpClient,但是票证的来源可能并不重要。为了“修复”这个,你必须为此创建一个单独的接口和类。
一些优点:
我可以推荐罗伯特·C·马丁的书“清洁代码”,它提供了一些很好的指导方针来实现这一目标。