这个班级是否违反了SRP?

时间:2016-10-07 13:14:58

标签: solid-principles

上课:

class Printer
{
    public void StartPrintAndWaitForCompletion()
    {
        Start();
        WaitForCompletion();
    }

    private void Start()
    {
        // some logic for start printing
    }

    private void WaitForCompletion()
    {
        // some logic that waits for specific state of printer queue
    }
}
  1. 此课程是否违反了SRP?
  2. 方法StartPrintAndWaitForCompletion不止一件事。我应该删除它并始终分别调用Start()和WaitForCompletion()吗?

4 个答案:

答案 0 :(得分:0)

这个课程似乎是在处理印刷,这是一个单一的责任,没关系。

你绝对应该对StartPrintAndWaitForCompletion做些什么,但你需要决定做什么,最明显的解决方案就是简单地称之为print

答案 1 :(得分:0)

好吧,你可能没有在班级违反SRP,因为Printer班级处理打印是合理的。但是,你似乎有一个漏洞的抽象。 StartPrintAndWaitForCompletion对实际实施过多了解。

如果您的API是同步的,那么调用类似Printer.print之类的东西必须等到打印完成后才能将控件返回到调用方法。如果你想设计一个异步API,那么我会选择类似Future的API。在C#中,您可以使用tasks

答案 2 :(得分:0)

我认为它不会打破SRP。但是您可以更改公共方法名称。因为它讲述了实际的实现,从而打破了封装。

答案 3 :(得分:0)

单一责任原则说: "一个班级应该只有一个改变的理由" (见https://en.wikipedia.org/wiki/Single_responsibility_principle)。

打印逻辑是显然属于Printer的一项责任。 它可能会单独更改。

等待完成是另一个责任,也可能单独改变(是否总是需要等待?等待多长时间?如果等待超时达到怎么办,等等)我建议将这个逻辑移到另一个班级(看看可用于您的语言的任务执行框架)。