什么时候需要以接口的形式创建抽象?

ley*_*cua 4 oop abstraction interface

您何时鼓励对接口进行编程而不是直接针对具体类?

我遵循的准则是在代码需要跨越逻辑/物理边界时创建抽象,尤其是涉及与基础架构相关的问题时.

另一个检查点是,由于可能存在额外的关注代码(例如缓存,事务感知,调用Web服务而不是进程内执行),或者此类依赖关系是否直接引用基础结构集成点,因此将来可能会更改依赖关系.

如果代码依赖于不需要控制来跨越逻辑/物理边界的东西,我或多或少都不创建抽象来与那些进行交互.

我错过了什么吗?

Pat*_*her 6

此外,使用接口时

  • 需要以特定方式多个对象起作用,但这些对象并不是根本相关的.也许您的许多业务对象访问特定的实用程序对象,当他们这样做时,他们需要为该实用程序对象提供自己的引用,以便实用程序对象可以调用特定的方法.在接口中使用该方法并将该接口传递给该实用程序对象.

  • 将接口作为参数传递在单元测试中非常有用.即使您只有一种类型的对象运行特定的接口,因此不需要定义的接口,您可以定义/实现一个接口,仅在单元测试中" 伪造 "该对象.

  • 与前2个项目符号相关,请查看Observer模式依赖注入.我不是说要实现这些模式,但它们说明了接口真正有用的地方类型.

  • 另一个问题是实现一些SOLID Principal,Open Closed principalInterface Segregation原则.像前面的子弹一样,不要强调在各处严格执行这些原则(至少是马上),但是使用这些概念来帮助你的想法远离什么对象去哪里思考更多关于契约依赖的东西

  • 最后,让我们不要太复杂:我们处于.NET中的强类型世界.如果您需要调用方法或设置属性,但是您传递/使用的对象可能根本不同,请使用接口.

我想补充一点,如果你的代码不会被另一个库引用(至少一段时间),那么在特定情况下是否使用接口的决定是你可以负责任推迟的.这些天,"提取界面"重构很容易.在我目前的项目中,我有一个被传递的对象,我想也许我应该切换到一个界面; 我并没有强调它.