根据SOLID,不仅您应该创建接口,而且不仅应在不同的文件中,而且还应在不同的程序集中。
为什么?因为对源文件的任何更改都必须重新编译该程序集,而对源文件的任何更改都需要重新编译该程序集,而对程序集的任何更改都需要重新编译任何从属程序集。因此,如果您基于SOLID的目标是能够用实现B替换实现A,而依赖于接口I的类C不必知道区别,则必须确保使用I进行组装它不会改变,从而保护了用法。
“但这只是重新编译”,我听到您提出抗议。可能是这样,但是在您的智能手机应用程序中,这更容易满足用户的数据带宽;是下载一个已更改的二进制文件,还是使用依赖于该代码的代码下载该二进制文件和其他五个二进制文件?并非所有程序都被编写为供LAN上的台式计算机使用。即使在那种带宽和内存便宜的情况下,较小的补丁程序发行版也很有价值,因为通过Active Directory或类似的域管理层将它们发布到整个LAN并不容易。您的用户只需等待几秒钟即可在下次登录时应用该功能,而无需等待几分钟即可重新安装整个程序。更不用说,构建项目时必须重新编译的程序集越少,构建速度就越快,
现在,免责声明:这并非总是可行或可行的。最简单的方法是创建一个集中的“接口”项目。这有其缺点。代码变得更不可重用了,因为必须在其他应用中重用应用程序的持久层或其他关键组件来引用接口项目和实施项目。您可以通过将接口拆分为更紧密耦合的程序集来解决该问题,但随后您的应用程序中会有更多项目,这会使完整版本非常痛苦。关键是保持平衡,并保持松耦合的设计;您通常可以根据需要移动文件,因此当您看到一个类将需要进行很多更改,或者需要定期执行该接口的新实现时(例如与其他软件的新支持版本进行接口,