2009-10-10 38 views
5

編程非DI系統時隱藏在我身邊的一個隱喻是「一個玩他/她的玩具的人」。一個人是一個物體,而這個人的玩具是該物體創造,存儲,初始化和操縱的任何東西。玩具可以在達到特定狀態時發送事件,但他們對使用它的人一無所知;它們只是帶有構成其接口的控制開關的小黑盒子。該人可以收聽玩具發出的事件,並通過操縱他們的界面進行迴應。這個人可以用他/她的玩具做他/她想做的任何事情,但他/她可能不應該干涉他們的內臟,因爲他們可能會破壞他們。什麼是依賴注入的好隱喻?

DI對我的隱喻造成的破壞是它將玩具變成了知道他們的主人,使用他們的人的意識生物。玩具可以操縱這個人,但這個人對他們的工作方式一無所知,甚至不在乎。這個人只是擁有玩具,並期望玩具操縱他/她讓玩具滿意。

WTF ??這聽起來很可怕!
他們一直用來思考DI系統如何工作的良好心理隱喻是什麼?

回答

3

SOLID motivational images是一個很好的來源。

metaphor of the dependency injection principle

+0

鏈接是否被破壞? – 2013-05-07 05:08:29

+1

@DavidAndreoletti謝謝你的領導。我再次找到它並上傳了一份到SO而不是簡單的鏈接。 – Finglas 2013-05-07 08:18:42

1

這些玩具沒有意識。他們只是讓這個人把繩子的一部分綁在鉤子上,當某些事情發生時,鉤子會轉動,繩子就會被拉上,所以這個人知道發生了什麼。

2

從我的角度來看,DI和非DI在你的隱喻方面的區別在於非DI系統,每個人都製作自己的玩具 - 他們必須知道如何製作它們,他們只能使用玩具他們做了。使用DI,該人使用他們給予的玩具。他們不知道如何製作它們,但只要知道玩具的行爲方式,他們就可以玩玩具。

10

想想一個紳士和他的管家。管家(DI框架)向紳士提供他需要的任何服務(外部依賴)(有些像早晨咖啡一樣,在「初始化」時:-));紳士(你的班級)只是消費這些服務,並不關心他們來自哪裏,只要他們符合他的要求(實現某個界面)。

或者如果你想讓它更接近你的隱喻,你的班級就是孩子,DI框架是媽媽,玩具是其他組件。孩子不關心玩具從哪裏來,只要她可以按照自己想要的方式玩耍。

0

這一切都是關於武士和武器。試試看看ninject:http://ninject.org/。去一個有趣的比喻去「訪問道場」角色。不知道這是不是你的意思,但它是有創意的。

2

樂高積木。

將樂高積木想象成暴露一個或多個接口(頂部的小顛簸)並具有一個或多個設置者或構造函數參數(底部的孔)的軟件組件。

當您購買一盒樂高積木時,這些積木不會預組裝(硬連線)。它們是獨立的組件。然後通過將接口(凸點)連接到設置器/構造器(孔)來組裝它們(連線)。每個塊直接不瞭解其他塊。除了塊之外,還需要組裝它們 - 也就是你(或main()或Spring配置文件等)。

我知道...這打破了一點,因爲積木很大程度上有一個統一的接口 - 但它爲我的作品:-)

2

我使用的計算機系統。你有一個系統塊,你(一個DI)連接到一個監視器,一個鍵盤和一個鼠標。系統模塊只知道顯示器是DVI設備,但不關心它是哪個顯示器。它知道如何使用USB鼠標,但不知道或不在乎天氣,它是光學鼠標或滾珠鼠標。

您 - DI框架。
系統塊 - 系統正在服務。
監視器/鼠標/鍵盤 - 由DI(您)提供給系統塊的服務。

1

我被告知的一個DI隱喻是與CD播放器相關聯的。玩家不關心你放入了什麼CD;不過,每個注入播放器的CD根據播放器對其的要求提供不同的功能。