有沒有JavaScript的控制框架的任何倒置?有沒有JavaScript的控制框架的任何倒置?
我可以找到的最近的stackoverflow上的答案在這裏:What is the right way to wire together 2 javascript objects?。這看起來是一個很好的開始,但我認爲我能夠找到一個有更長髮展歷史的東西。
我只使用了Castle Windsor我自己,我真的很想念它在網絡客戶端的土地。
有沒有JavaScript的控制框架的任何倒置?有沒有JavaScript的控制框架的任何倒置?
我可以找到的最近的stackoverflow上的答案在這裏:What is the right way to wire together 2 javascript objects?。這看起來是一個很好的開始,但我認爲我能夠找到一個有更長髮展歷史的東西。
我只使用了Castle Windsor我自己,我真的很想念它在網絡客戶端的土地。
我把一個簡單的輕量級ioc容器放在一起,叫做JsfIoc。
我開始寫一篇我從來沒有寫完的文章。不知道我是否會因爲開銷可能不值得。如果你有興趣,它在:http://code.google.com/p/jasproject/wiki/JasFac(這是國際奧委會部分,全套在http://code.google.com/p/jasproject/)
嘲諷庫是相當完整(沒有預期雖然,此刻我只是用在嘲笑/存根斷言)但缺乏單元測試框架。 IoC部分相當完整,但可能有一些錯誤(儘管不這麼認爲)
隨意使用它和/或貢獻,我可以幫助你需要的地方。
編輯:更多的使用可以在單元測試jasfac可以看出:https://jasproject.googlecode.com/svn/trunk/Jas.Tests/JasFacTests.js
你能詳細說明你爲什麼不需要它嗎? – 2009-09-15 16:48:56
好吧,正如我在其他評論中所說的,大多數人在JS中使用服務定位器來滿足這種需求。此外,JS的大小確實很重要,所以除非您創建一個_really_胖客戶端,否則您希望儘可能減少代碼大小和計算量。見http://video.yahoo.com/watch/1041101/3881103 – 2009-09-16 06:47:41
我一直在尋找過去的一年,整個squirrel-ioc跑。有一件事我不喜歡 - 我認爲它只支持單例風格的實例。
松鼠是IoC容器 JavaScript實現,以促進 更好地利用架構和基於瀏覽器的Javascript 應用
我開始寫我自己的,並得到了很遠 模式(構造函數和setter注入,值和引用關係,singleton支持,JsUnit測試),但從未真正需要它在我的應用程序中。我可能不得不看看盧克的項目。作爲參考,這裏是我最終配置格式的一個例子。
var iocConfig = {
"a" : { Type : A },
"b1" : { Type : B, Props : [{Name : 'Letter', Ref : "a"}] },
"b2" : { Type : B, Props : [{Name : 'Letter', Val : "a"}] },
"c2" : { Type : C, Args : [{Ref : "a"}, {Val : "a"}] },
"d" : { Type : D, Props : [{Name : 'Letter', Ref : "a"}] },
"date" : { Type : Date, Props : [{Name : 'FullYear', Val : 2008}, {Name : 'Month', Val : 0}, {Name : 'Date', Val : 1}] },
"array3" : { Type : Array, Args : [{Val : 3}] },
"number1" : { Type : Number, Args : [{Val : 1}] },
"string1" : { Type : String, Args : [{Val : "1"}] },
"s-true" : { Type : S, Singleton : true},
"s-false" : { Type : S, Singleton : false}
};
是的,我也不是松鼠的粉絲,因此寫我自己的。我有同樣的事情 - 開始它,但沒有真正的需要,所以從未完成。看看我的源代碼,特別是單元測試,你可以用它做很多事情,而不是站點的方式。 – 2009-09-15 05:59:48
你能詳細說明爲什麼你不需要它嗎? – 2009-09-15 16:50:40
在像JavaScript和Ruby這樣的動態類型語言中,DI並不是真的有益。
DI在靜態類型語言(如Java)中的主要優勢在於測試 - 用模擬替換某些類的實際實現。這是因爲在Java中,類是不可變的,你不能輕易地用mock替換它們 - 你需要一個完整的DI系統來實現它。
但是在JavaScript中,您可以輕鬆地用嘲諷的方法替換現有的類/方法。所以DI不是真正需要實現可測試性。
當然,還有其他一些場景,其中DI可能是有用的,但你並沒有真正指出你想要使用DI,所以我介紹了最明顯的例子。
我認爲DI與IoC不同。是的,使用Javascript很容易,因爲您可以隨時隨地編寫代碼,目前我正在使用DI進行單元測試。雖然DI在Javascript中更容易,但我認爲IoC在記錄依賴關係和使測試代碼更清晰方面仍然有優勢。現在,當我測試某些東西時,我必須手動驗證每個依賴項已被正確替換。藉助IoC,您可以清楚地看到存在哪些依賴項以及它們被替換的內容。 – 2009-09-18 16:58:47
好點弗蘭克。 – 2009-09-21 08:17:11
我只是經歷過,所以我沒有時間查找參考,但DI不僅僅用於測試(它甚至不是主要的好處)。 – 2009-09-29 05:49:01
我用一個,這裏是從規格簡單的代碼(這是CoffeeScript的):
di.register 'a', -> 'component a'
di.get('a').should be: 'component a'
也有回調,不同範圍(應用程序,例如,自定義),明確指定成分的能力。
DI: https://github.com/alexeypetrushin/rad_core/blob/master/assets/lib/dependency_injection.coffee
我用它組裝Backbone.js的應用,有很多的對象(應用程序,菜單,公告,...)的,它是讓我生活更輕鬆。
警告:我在內部使用它改變了原生對象,所以可能會有一些錯誤:)請讓我知道他們,我可能修復它在一天或兩天(通過經問題頁https://github.com/alexeypetrushin/rad_core/issues提交)。
P.S.不喜歡IoC術語太廣泛,DI更準確。
你可以看看這個簡單的庫:fcjs 這是非常小的,但可以在解耦你的代碼是強大的。 它的靈感來自Swiz AS3框架
另一個(較新的)選項是requireJS(http://requirejs.org/)。
不是新的,不是IoC – 2013-01-31 05:01:24
是的,不同類型的依賴管理:) – jamiebarrow 2013-02-08 09:20:14
IoC真的帶出了學生。它是一個有效的選項。 – 2013-02-08 16:38:25
嘗試輸液。這是一個非常強大的IoC JS框架。它是在多倫多和伯克利Infusion的大學
更多的信息,該項目的GitHub的頁面可以在這裏找到Infusion GitHub pages
退房倒使用幾個研究中心,一個功能豐富的我已經創建了JavaScript IOC容器。它在AMD的瀏覽器上運行,也可以與Node協同工作。
與AMD一起使用,Inverted使用單獨的配置文件來表示類如何實例化以及它們如何交互。一旦定義了這些默認值和關係,就可以創建一個應用程序上下文,並且可以使用這些類的實例。
我們建立了一個簡單的JavaScript IoC容器稱爲hilary.js:https://github.com/Acatar/hilaryjs。
隨着希拉里,你可以註冊和解決服務和工廠。它也支持子容器,如果你需要或想要確定容器的範圍。
編輯 我加了一些examples using hilary,還有的achieving Dependency Injection with require.js一個例子:
我已經創建和JavaScript的IoC容器的應用程序,請檢查它在http://blog.wolksoftware.com/introducing-inversifyjs
嘗試canDI。這是一個簡單的依賴注入和對象創建庫。您可以創建在創建時自動註冊的單例,實例和變量。
你可以只在一個不同的文件重命名功能,爲什麼還需要一個框架? – 2009-09-15 04:27:03
除此之外還有更多。在JasFac中(請參閱我的回答)我甚至沒有開始刮擦可以/應該做什麼的表面。這是一個很大的話題。 JavaScript通常傾向於使用服務定位器樣式模式,完全繞過IoC – 2009-09-15 04:40:41
一些回覆來自喜歡IoC的人,但實際上並沒有最終使用他們的解決方案。我很好奇如何保持它們的對象去耦合。使用服務定位器? – 2009-09-15 16:55:05