介面隔離原則的意圖就是為了避免我們的代碼依賴一些用不到的介面,介面不應該大而全,而是根據相關功能進行分組。當然介面隔離也不是說要一個行為就定義一個介面,而是更具具體類把共同的行為抽象成一個介面,不同的部分單獨定義成介面。 代碼示例 Bad Code 對於T恤類而言Certification和Runn ...
介面隔離原則的意圖就是為了避免我們的代碼依賴一些用不到的介面,介面不應該大而全,而是根據相關功能進行分組。當然介面隔離也不是說要一個行為就定義一個介面,而是更具具體類把共同的行為抽象成一個介面,不同的部分單獨定義成介面。
代碼示例
Bad Code
/// <summary>
/// 一個功能豐富的介面
/// </summary>
public interface IProduct
{
decimal Price { get; set; }
decimal WeighInKg { get; set; }
int Stock { get; set; }
int Certification { get; set; }
int RunningTime { get; set; }
}
public class DVD : IProduct
{
public int Certification { get; set; }
public decimal Price { get; set; }
public int RunningTime { get; set; }
public int Stock { get; set; }
public decimal WeighInKg { get; set; }
}
public class BluRayDisc : IProduct
{
public int Certification { get; set; }
public decimal Price { get; set; }
public int RunningTime { get; set; }
public int Stock { get; set; }
public decimal WeighInKg { get; set; }
}
/// <summary>
/// T恤,非電影類產品
/// </summary>
public class TShirt : IProduct
{
public int Certification { get; set; }
public decimal Price { get; set; }
public int RunningTime { get; set; }
public int Stock { get; set; }
public decimal WeighInKg { get; set; }
}
對於T恤類而言Certification和RunningTime是沒有意義的,所以我們應該將電影類商品和TShirt之間進行分組。
public interface IProduct
{
decimal Price { get; set; }
decimal WeighInKg { get; set; }
int Stock { get; set; }
}
public interface IMovie
{
int Certification { get; set; }
int RunningTime { get; set; }
}
public class DVD : IProduct, IMovie
{
public int Certification { get; set; }
public decimal Price { get; set; }
public int RunningTime { get; set; }
public int Stock { get; set; }
public decimal WeighInKg { get; set; }
}
public class BluRayDisc : IProduct, IMovie
{
public int Certification { get; set; }
public decimal Price { get; set; }
public int RunningTime { get; set; }
public int Stock { get; set; }
public decimal WeighInKg { get; set; }
}
public class TShirt : IProduct
{
public decimal Price { get; set; }
public int Stock { get; set; }
public decimal WeighInKg { get; set; }
}