2017-01-25 95 views
1

我最近讀了nice, easy to understand article about open/closed principle。我一直想通過以下經驗:開放/關閉原則如何幫助避免重新部署程序集?

在真實世界場景的代碼庫是十個,一百個一千次大和修改類意味着重新部署它的組裝/包到五個不同的服務器這可能是一個相當大的問題。哦,在現實世界中Aldford會五次,因爲你讀的最後一句話:-)

如何open/closed principle可以幫助避免重新部署組件改變的要求?

+1

@downvoter downvote的原因是什麼? – StepUp

+5

我認爲這篇文章誤導了開放關閉的關鍵好處是允許部分部署。真正的好處是易於擴展/修改。說實話,這篇文章的內容類似於作者理解如何遵守原則,但沒有完全理解它的原因。 –

+1

我認爲如果ocp用於部分部署,實際上會很有趣。 – Tyress

回答

1

正如你所知,開放/關閉原則可以通過不同的方式完成,具體取決於場景。 對於裝配的後期綁定的場景,開放/關閉原則對我來說意味着對代碼中可能及時發生最小/主要變化的部分的接口進行編程。關於後期綁定

更多信息: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的特定位置。

後期綁定方法從另一個角度來看只是依賴反轉原理,但也允許在不改變應用程序中的原始代碼的情況下擴展/更改計算功能的行爲。

希望這會有所幫助。

+0

KISS原則不是固體,但它還很簡單:D –

+0

是的,我同意;] –