接口是抽象类的同义词,没有植入w.r.t.SOLID
本文关键字:SOLID 抽象类 同义词 接口 | 更新日期: 2023-09-27 18:25:44
SOLID同时具有单一责任原则和接口分离原则 我相信(尽管如果我错了,请纠正他们)在 所以。。。我可以公平地说,SOLD可以变成SOLID? 好的,让我详细说明。我知道有一些微妙的"幕后"差异,比如多重继承。在SOLID的世界里,有什么论点适用于 请注意,至少在.NET
中,interface
与没有实现的abstract class
是一样的。也就是说,如果我用抽象类替换了所有接口,那么就不会有任何变化(关于SOLID)。S.R.P.
或I.S.P.
,而不适用于另一个吗?.NET
和Java
中,类必须至少与接口一样大
职责和接口之间有区别。一个责任可以由几个密切相关的功能组成,而一个接口可能只与几个功能相关。
例如,类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的概念。