我正在開發一個電信項目。我在我的項目中實施了Open/Closed原則。以下是我的課程。OOPS中的打開/關閉原理
MainServiceClass.CS
public abstract class BaseServiceClass
{
public abstract IEnumerable<string> GetServiceData();
public abstract IEnumerable<string> GetDashBoardData();
}
Web_Service.CS
public class WebServiceClass : BaseServiceClass
{
public override IEnumerable<string> GetServiceData()
{
List<string> MyList = new List<string>();
return MyList;
}
public override IEnumerable<string> GetDashBoardData()
{
List<string> MyList = new List<string>();
return MyList;
}
}
Voice_Service.CS
public class VoiceSericeClass : BaseServiceClass
{
public override IEnumerable<string> GetServiceData()
{
List<string> MyList = new List<string>();
return MyList;
}
public override IEnumerable<string> GetDashBoardData()
{
List<string> MyList = new List<string>();
return MyList;
}
}
在未來,如果我需要實現視頻服務,我將創建一個新的Video_Service類。我相信我會實現Open/Close原則。
如果我需要在我的MainServiceClass.cs中添加一個新方法,我將添加一個新方法(GetNewTypeOfData())。
問題:在這裏,我正在修改一個類。不過,我是否遵循OCP?或者,有沒有什麼辦法可以在MainServiceClass.cs中添加新的方法?
請建議。
P.S.我需要在所有的派生類即Web_Service.cs,Voice_Service.cs實現這個方法,並Video_Service.cs
更新CrudaLilium後答覆我的問題。
這是我的理解。如果我錯了,請糾正我。
我當前的代碼:
public interface IMainBase
{
IEnumerable<string> GetData2016();
}
public class VoiceService : IMainBase
{
public IEnumerable<string> GetData2016()
{
return Enumerable.Empty<string>();
}
}
我會得到一個新的要求,在2017年因此,我將更新2017年
public interface IMainBase
{
IEnumerable<string> GetData2016();
}
public class VoiceService : IMainBase
{
public IEnumerable<string> GetData2016()
{
return Enumerable.Empty<string>();
}
}
//New Code will be Added in 2017....Start
public interface IMainBase2017 : IMainBase
{
IEnumerable<string> GetData2017();
}
public class voiceService2017 : VoiceService, IMainBase2017
{
public IEnumerable<string> GetData2017()
{
return Enumerable.Empty<string>();
}
}
//New Code Added be in 2017...Ended
我的代碼,我會在2018年再次獲得了新的要求。所以,我會在2018年更新我的代碼。
public interface IMainBase
{
IEnumerable<string> GetData2016();
}
public class VoiceService : IMainBase
{
public IEnumerable<string> GetData2016()
{
return Enumerable.Empty<string>();
}
}
//New Code will be Added in 2017....Start
public interface IMainBase2017 : IMainBase
{
IEnumerable<string> GetData2017();
}
public class voiceService2017 : VoiceService, IMainBase2017
{
public IEnumerable<string> GetData2017()
{
return Enumerable.Empty<string>();
}
}
//New Code Added be in 2017...Ended
//New Code will be Added in 2018...Start
public class WebService2018 : IMainBase2017
{
public IEnumerable<string> GetData2016()
{
return Enumerable.Empty<string>();
}
public IEnumerable<string> GetData2017()
{
return Enumerable.Empty<string>();
}
}
//New Code will be Added in 2018...End
根據上面的代碼,我沒有違反OCP。這是一個很好的做法,還是我有其他方法?
你是說你想添加新的方法和實現,將出現在所有類? – Turbot
是的,我想在MainService類中添加一個新方法,稍後我將在派生類中重寫它。 – KiddoDeveloper
當您在添加新功能時必須更改現有課程時,您將違反OCP。所以你沒有遵循OCP;你正在破壞它。 – Steven