我不明白界面隔离原则与开放/封闭原则之间的区别。
我的理解是ISP必须使所有东西都依赖于接口和类上的OCP,我发现它们都可以用相同的方式实现,但是一个有接口,一个有类。
答案 0 :(得分:3)
Programming to interfaces
告诉我们我们的代码应该依赖于接口,而ISP
则指导我们不要创建具有大量方法的神接口。大型接口会导致两个主要问题:
OCP
指导我们编写可以在不修改现有代码的情况下扩展的代码。因此,例如,假设您有以下界面:
public interface ITask
{
void Execute();
}
然后创建实现SendToEmailTask
接口的ITask
类。
假设在一段时间后出现新要求,您需要将记录添加到SendToEmailTask
。根据{{1}},您不应修改现有代码,而应添加同时实现OCP
接口的新LoggingTask
(使用ITask
模式):
Decorator
多亏了你,你也实现了public class LoggingTask : ITask
{
private readonly ITask task;
public LoggingTask(ITask task)
{
//guard clause
this.task = task;
}
public void Execute()
{
Logger.Log("task...");
this.task.Execute();
}
}
原则。
答案 1 :(得分:0)
让我们从单元测试开发的角度来看待原理。
如果您为单个接口/类编写了大量单元测试,那就像违反ISP原则一样。界面太大了。
如果你想在测试接口/类中覆盖一些方法,但你不能这样做,因为这个方法不是虚拟的,就像你违反了OCP原则而你的类不允许扩展。