2009-09-15 36 views
15

有沒有JavaScript的控制框架的任何倒置?有沒有JavaScript的控制框架的任何倒置?

我可以找到的最近的stackoverflow上的答案在這裏:What is the right way to wire together 2 javascript objects?。這看起來是一個很好的開始,但我認爲我能夠找到一個有更長髮展歷史的東西。

我只使用了Castle Windsor我自己,我真的很想念它在網絡客戶端的土地。

+0

你可以只在一個不同的文件重命名功能,爲什麼還需要一個框架? – 2009-09-15 04:27:03

+0

除此之外還有更多。在JasFac中(請參閱我的回答)我甚至沒有開始刮擦可以/應該做什麼的表面。這是一個很大的話題。 JavaScript通常傾向於使用服務定位器樣式模式,完全繞過IoC – 2009-09-15 04:40:41

+0

一些回覆來自喜歡IoC的人,但實際上並沒有最終使用他們的解決方案。我很好奇如何保持它們的對象去耦合。使用服務定位器? – 2009-09-15 16:55:05

回答

4

我開始寫一篇我從來沒有寫完的文章。不知道我是否會因爲開銷可能不值得。如果你有興趣,它在: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

+1

你能詳細說明你爲什麼不需要它嗎? – 2009-09-15 16:48:56

+0

好吧,正如我在其他評論中所說的,大多數人在JS中使用服務定位器來滿足這種需求。此外,JS的大小確實很重要,所以除非您創建一個_really_胖客戶端,否則您希望儘可能減少代碼大小和計算量。見http://video.yahoo.com/watch/1041101/3881103 – 2009-09-16 06:47:41

4

我一直在尋找過去的一年,整個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} 
}; 
+0

是的,我也不是松鼠的粉絲,因此寫我自己的。我有同樣的事情 - 開始它,但沒有真正的需要,所以從未完成。看看我的源代碼,特別是單元測試,你可以用它做很多事情,而不是站點的方式。 – 2009-09-15 05:59:48

+4

你能詳細說明爲什麼你不需要它嗎? – 2009-09-15 16:50:40

0

在像JavaScript和Ruby這樣的動態類型語言中,DI並不是真的有益。

DI在靜態類型語言(如Java)中的主要優勢在於測試 - 用模擬替換某些類的實際實現。這是因爲在Java中,類是不可變的,你不能輕易地用mock替換它們 - 你需要一個完整的DI系統來實現它。

但是在JavaScript中,您可以輕鬆地用嘲諷的方法替換現有的類/方法。所以DI不是真正需要實現可測試性。

當然,還有其他一些場景,其中DI可能是有用的,但你並沒有真正指出你想要使用DI,所以我介紹了最明顯的例子。

+6

我認爲DI與IoC不同。是的,使用Javascript很容易,因爲您可以隨時隨地編寫代碼,目前我正在使用DI進行單元測試。雖然DI在Javascript中更容易,但我認爲IoC在記錄依賴關係和使測試代碼更清晰方面仍然有優勢。現在,當我測試某些東西時,我必須手動驗證每個依賴項已被正確替換。藉助IoC,您可以清楚地看到存在哪些依賴項以及它們被替換的內容。 – 2009-09-18 16:58:47

+0

好點弗蘭克。 – 2009-09-21 08:17:11

+2

我只是經歷過,所以我沒有時間查找參考,但DI不僅僅用於測試(它甚至不是主要的好處)。 – 2009-09-29 05:49:01

0

我用一個,這裏是從規格簡單的代碼(這是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

規格: https://github.com/alexeypetrushin/rad_core/blob/master/assets/lib_spec/dependency_injection_spec.coffee

我用它組裝Backbone.js的應用,有很多的對象(應用程序,菜單,公告,...)的,它是讓我生活更輕鬆。

警告:我在內部使用它改變了原生對象,所以可能會有一些錯誤:)請讓我知道他們,我可能修復它在一天或兩天(通過經問題頁https://github.com/alexeypetrushin/rad_core/issues提交)。

P.S.不喜歡IoC術語太廣泛,DI更準確。

0

你可以看看這個簡單的庫:fcjs 這是非常小的,但可以在解耦你的代碼是強大的。 它的靈感來自Swiz AS3框架

0

另一個(較新的)選項是requireJS(http://requirejs.org/)。

+9

不是新的,不是IoC – 2013-01-31 05:01:24

+1

是的,不同類型的依賴管理:) – jamiebarrow 2013-02-08 09:20:14

+1

IoC真的帶出了學生。它是一個有效的選項。 – 2013-02-08 16:38:25

-1

嘗試輸液。這是一個非常強大的IoC JS框架。它是在多倫多和伯克利Infusion的大學

更多的信息,該項目的

GitHub的頁面可以在這裏找到Infusion GitHub pages

1

退房倒​​使用幾個研究中心,一個功能豐富的我已經創建了JavaScript IOC容器。它在AMD的瀏覽器上運行,也可以與Node協同工作。

與AMD一起使用,Inverted使用單獨的配置文件來表示類如何實例化以及它們如何交互。一旦定義了這些默認值和關係,就可以創建一個應用程序上下文,並且可以使用這些類的實例。

http://dailyjs.com/2013/01/04/controldeck-xlsx-inverted/

相關問題