我正在阅读R. Martin 和 M. Martin的 C# 中的敏捷原则、模式和实践, 他们在他们的书中建议,将所有接口保存在一个单独的项目中,例如。接口。
例如,如果我有一个包含所有自定义 Gui 类的Gui项目,我会将它们的接口保留在Interfaces项目中。具体来说,我在Gui中有一个 CustomButton 类,我会将 ICustomButton 接口保留在Interfaces中。
优点是,任何需要 ICustomButton 的类都不需要对Gui本身的引用,而只需要对重量轻得多的Interfaces项目的引用。
此外,如果Gui项目中的类发生更改并因此导致它被重建,则只有直接引用 CustomButton 的项目需要重新编译,而引用 ICustomButton 的项目可能保持不变。
我理解这个概念,但看到一个问题:
假设我有这个界面:
public interface ICustomButton
{
void Animate(AnimatorStrategy strategy);
}
如您所见,它指的是 AnimatorStrategy,这是一个具体的类,因此将位于不同的项目中,我们称之为Animation。现在界面工程需要引用Animation。另一方面,如果Animation使用 Interfaces 中定义的接口,则需要引用它。
循环依赖——“我们来了”。
我看到,这个问题的唯一解决方案是,接口中定义的所有方法都接受本身就是接口的输入。尝试实现这一点很可能会产生多米诺骨牌效应,并且即使对于最基本的类也很快需要实现接口。
我不知道我是否愿意在开发中处理这种开销。
有什么建议么?