接口是抽象类的同义词,没有植入w.r.t.SOLID

本文关键字:SOLID 抽象类 同义词 接口 | 更新日期: 2023-09-27 18:25:44

SOLID同时具有单一责任原则接口分离原则

我相信(尽管如果我错了,请纠正他们)在.NET中,interface与没有实现的abstract class是一样的。也就是说,如果我用抽象类替换了所有接口,那么就不会有任何变化(关于SOLID)。

所以。。。我可以公平地说,SOLD可以变成SOLID

好的,让我详细说明。我知道有一些微妙的"幕后"差异,比如多重继承。在SOLID的世界里,有什么论点适用于S.R.P.I.S.P.,而不适用于另一个吗?

请注意,至少在.NETJava中,类必须至少与接口一样大

接口是抽象类的同义词,没有植入w.r.t.SOLID

职责和接口之间有区别。一个责任可以由几个密切相关的功能组成,而一个接口可能只与几个功能相关。

例如,类Connection可以负责处理客户端-服务器连接,但它的接口之一可以是ICommunicate,它只关心在连接建立后通过连接发送数据。

类通常代表某种实体,而接口通常代表一种能力。一个实体可以具有多种能力,不同种类的实体可以具有相同的能力。

SOLID的目的是让您创建一个实现独立的系统。

SOLID意味着构建许多注入其依赖关系的部分,以便系统的每个方面都是可独立测试的。您有一个IDbConnectionService,它为您的项目提供实施合同。当为使用IDbConnectionService作为依赖项的服务编写测试用例时,您可以模拟IDbConnectionServices的功能,以在伪造的运行时环境中返回所需的内容。

通过使用基类,您现在提供了一个低级别的实现。我们使用SOLID的目的是专门在绝对必要之前不提供实现。

例如,以IConnectionFactory为例:

IConnectionFactory.cs

public interface IConnectionFactory {
     DbConnection GetProviderConnection(); //CLR type that oracleconn and sqlconn derive from
}

SqlConnectionFactory.cs

public class SqlConnectionFactory : IConnectionFactory {
    //explicit implementation of GetProviderConnection    
}

OracleConnectionFactor.cs

public class OracleConnectionFactory : IConnectionFactory {
    //explicit implementation of GetProviderConnection
}

SqlConnection和OracleConnection有一个改变的原因,但接口分离主体只需要它们履行一个契约,就可以代替ConnectionFactory的概念。