单一责任原则 - 功能

时间:2016-04-04 20:36:59

标签: coding-style single-responsibility-principle

我正在阅读有关SOLID编程的一些内容,并且我正在尝试重构我的测试项目以实现其中一些规则。

我经常怀疑SingleResponsibilityPrinciple,所以我希望有人可以帮助我。

据我所知,SRP意味着(在函数的情况下),函数应该只负责一件事。而这似乎很容易和简单,但我确实陷入了做多事情的陷阱。

这是一个简化的例子:

Y

令人困惑的部分是class TicketService { private ticket; getTicket() { httpClient.get().then(function(response) { ticket = response.ticket; emit(ticket); <---------------------- }); } } 。所以,我的函数名为emit(ticket),这正是我在那里做的(例如从服务器获取),但另一方面,我需要将更改发送到所有其他部分我的应用程序,让他们知道故障单已更改。

我可以创建单独的getTicket函数,在那里我可以设置私有变量,并在那里发出它,但这看起来是一回事。

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

2 个答案:

答案 0 :(得分:1)

你也可以从getTicket()函数返回票证,然后有一个名为setUpdatedTicket()的单独函数,它接受票证并设置私有参数,最后调用emit函数。

答案 1 :(得分:0)

这可能会导致意外行为。如果我希望将来重新使用您的课程,我会在IDE中看到自动完成方法getTicket()我希望获得Ticket

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

你可以把SRP拿得很远,例如你的TicketService有一个httpClient,但是票证的来源可能并不重要。为了“修复”这个,你必须为此创建一个单独的接口和类。

一些优点:

  • 代码变得越来越可重复使用
  • 单独测试零件更容易

我可以推荐罗伯特·C·马丁的书“清洁代码”,它提供了一些很好的指导方针来实现这一目标。