我最近讀了nice, easy to understand article about open/closed principle
。我一直想通過以下經驗:開放/關閉原則如何幫助避免重新部署程序集?
在真實世界場景的代碼庫是十個,一百個一千次大和修改類意味着重新部署它的組裝/包到五個不同的服務器這可能是一個相當大的問題。哦,在現實世界中Aldford會五次,因爲你讀的最後一句話:-)
如何open/closed principle
可以幫助避免重新部署組件改變的要求?
我最近讀了nice, easy to understand article about open/closed principle
。我一直想通過以下經驗:開放/關閉原則如何幫助避免重新部署程序集?
在真實世界場景的代碼庫是十個,一百個一千次大和修改類意味着重新部署它的組裝/包到五個不同的服務器這可能是一個相當大的問題。哦,在現實世界中Aldford會五次,因爲你讀的最後一句話:-)
如何open/closed principle
可以幫助避免重新部署組件改變的要求?
正如你所知,開放/關閉原則可以通過不同的方式完成,具體取決於場景。 對於裝配的後期綁定的場景,開放/關閉原則對我來說意味着對代碼中可能及時發生最小/主要變化的部分的接口進行編程。關於後期綁定
更多信息:https://en.wikipedia.org/wiki/Late_binding
不久後期綁定的背景下,我正在一提的是,選擇的dll在運行時在我們的程序中加載的能力。
我會試着用一個例子來解釋。 如果we'have應用程序是,它們提供了正在採取一些計算功能和巨大的部分minior(讓說,它增加了數字)
ICalculator
{
int Add(int a, int b);
}
包含計算器界面DLL被Application.Calcualtion.dll 和在dll中使用接口ICalculator
的代碼可能有一些Boostrapp/Init函數,它將實例化計算器的具體實現。
這裏來的是後期綁定。
而不是使用諸如Calculator = new ConcreteCalculator()
, 之類的東西,您可以從特定位置加載實現ICalculator接口的dll。
using Assemnly.LoadFile(path: "....")
那麼你可以使用查詢大會對接口財產以後這樣
var calculatorType = assembly.ExportedTypes.OfType<ICalculator>().Single();
通常DLL可以從某個特定位置加載。所以當計算器實現必須被更改時,應用程序的更新只能將具有ICalculator實現的新dll部署到您推動dll的特定位置。
後期綁定方法從另一個角度來看只是依賴反轉原理,但也允許在不改變應用程序中的原始代碼的情況下擴展/更改計算功能的行爲。
希望這會有所幫助。
KISS原則不是固體,但它還很簡單:D –
是的,我同意;] –
@downvoter downvote的原因是什麼? – StepUp
我認爲這篇文章誤導了開放關閉的關鍵好處是允許部分部署。真正的好處是易於擴展/修改。說實話,這篇文章的內容類似於作者理解如何遵守原則,但沒有完全理解它的原因。 –
我認爲如果ocp用於部分部署,實際上會很有趣。 – Tyress