Akh*_*hil 8 c# dependency-injection interface
我只是学习接口隔离原理.但是在学习之后我对示例中的场景感到困惑.
这个概念是将接口分成简单的接口.那很好,但我的问题是层次结构模型与否?
以我在书中研究的例子为例.
我有一个产品接口具有以下属性
public interface IProduct
{
decimal Price { get; set; }
decimal WeightInKg { get; set; }
int Stock { get; set; }
int Certification { get; set; }
int RunningTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我只是简化了界面中的一个类implmentation
public class DVD : IProduct
{
public decimal Price { get; set; }
public decimal WeightInKg { get; set; }
public int Stock { get; set; }
public int Certification { get; set; }
public int RunningTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
问题是当应用于没有相关属性的其他类别时.为TShirt创建类时,不需要Certification和RunningTime.因此,根据接口隔离原则,接口如下所示分开
创建一个新界面,将与电影相关的属性移动到这个属性,如下所示
public interface IMovie
{
int Certification { get; set; }
int RunningTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所以IProduct没有这些属性和实现,如下所示
public class TShirt : IProduct
{
public decimal Price { get; set; }
public decimal WeightInKg { get; set; }
public int Stock { get; set; }
}
public class DVD : IProduct, IMovie
{
public decimal Price { get; set; }
public decimal WeightInKg { get; set; }
public int Stock { get; set; }
public int Certification { get; set; }
public int RunningTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在概念上我对此感到满意.但是,如果这关于真正的方法实现这样.当我使用依赖注入时,我使用哪个接口作为DVD类的类型.
我很困惑或者我错过了什么?如果我应用继承逻辑,我们可以使用较低级别的接口,因此基接口也继承.但如果我这样使用怎么能实现?
如果你知道什么,这是一个电影总是会也是一个产品,你可以定义你的接口像这样,在IMovie
扩展IProduct
:
public interface IProduct
{
decimal Price { get; set; }
decimal WeightInKg { get; set; }
int Stock { get; set; }
}
public interface IMovie : IProduct
{
int Certification { get; set; }
int RunningTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后你的DVD
类只实现了IMovie
接口:
public class DVD : IMovie
{
public decimal Price { get; set; }
public decimal WeightInKg { get; set; }
public int Stock { get; set; }
public int Certification { get; set; }
public int RunningTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用您的其他示例,也许您TShirt
实现了一个IClothing
接口,它也是一个产品:
public class IClothing : IProduct
{
int Size { get; set; }
Color Color { get; set; }
}
public class TShirt : IClothing
{
public decimal Price { get; set; }
public decimal WeightInKg { get; set; }
public int Stock { get; set; }
public int Size { get; set; }
public Color Color { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,当您注入依赖项时,可以请求IMovie
或的实例IClothing
.