上课:
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
}
}
答案 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的一项责任。 它可能会单独更改。
等待完成是另一个责任,也可能单独改变(是否总是需要等待?等待多长时间?如果等待超时达到怎么办,等等)我建议将这个逻辑移到另一个班级(看看可用于您的语言的任务执行框架)。