46

除了語言差異Javascript與Objective-J卡布奇諾在SproutCore上提供了什麼好處,反之亦然?SproutCore與卡布奇諾

就長期預測而言,SproutCore比卡布奇諾更受「支持」,因爲它得到了蘋果的支持?

我想在兩者之間進行選擇。我熟悉JavaScript和Objective-C。

+1

也許這應該是一個wiki?不知道我怎麼能把它轉換成一個? – 2010-11-28 06:40:18

+0

考慮到年齡,上傳數量,問題的受保護狀態以及接受答案的普及程度,對「最新信息」的賞金似乎更適合作爲一個新問題,正如上述賞金中提供的上下文所述,本質上,改變問題的性質和答案。 – Claies 2015-02-28 18:48:03

回答

65

這是一個有趣的問題,並且在各種消息組,twitter,甚至是IRC,有幾種方法可以評估SproutCore與卡布奇諾,但也許有些人直接看到的caparisons如下:

1)它們各自的功能設置
2)使用
3)社區支持和文檔易於

讓我們來看看第一點 - 有相應的功能集。通過「功能集」,有幾種方法可以查看它。從他們擁有的UI小部件的數量來看;將事物連接在一起並與某種後端進行溝通的基礎支持;該框架的總體架構方法雖然不一定是「特徵」,但仍然很重要;是的,甚至可以使用的語言。

關於語言,我認爲重要的是不要忽視正在使用的東西(JS與Obj-J)。爲什麼?由於採用和你來自哪裏。 SproutCore來自JavaScript的確是網絡語言的角度來看,所以它就是你用來對框架進行編程的東西。如果JavaScript缺乏語言OO完整性(正確的對象 - 對象繼承等),則可以在框架中彌補(例如MyApp.Foo = SC.Object.extend({...}))。卡布奇諾從不同的角度進來。他們使用Obj-J作爲JS的主要語言增強功能,以便注入JS缺失的語言功能;這不是直接將這些語言特徵注入框架(卡布奇諾)本身。當然,正如在卡布奇諾以前注意到的人們一樣,你仍然可以使用JS來對抗卡布奇諾,但是,那麼你錯過了Obj-J提供的東西。請注意卡布奇諾社區:請糾正我,如果我錯了:-)。最後,如果你是一個熟悉Obj-C的人,那麼Obj-J可能更像是你的一杯茶。嘿,即使索尼顯然現在也跳上了整個Obj-C的流行趨勢,開發他們的移動平臺:-P。看看這兩個框架的架構,他們都以某種形式看待了Apple的Cocoa框架以獲得指導/啓發。卡布奇諾充分發揮可可的核心作用,並基本移植了Cocoas API。再說一次,如果你是從使用Cocoa開發蘋果應用程序開始的,那麼你可能會感覺到在家中的感覺。另一方面SproutCore從Cocoa那裏得到了靈感,那裏感覺很好。至於純體系結構,他們都遵循MVC,他們都使用Cocoa風格的綁定,他們都有一個數據存儲機制,他們都有自己的渲染和組成UI部件/視圖的風格。

對我來說,視圖的渲染對於一個特定的重要領域是非常重要的。這兩個框架都具有一定的抽象層次,可以避免直接處理CSS和HTML,即使在一天結束時他們必須呈現Web瀏覽器最終理解的內容。

在卡布奇諾方面,他們將CSS和HTML完全抽象出來。相反,您使用框架的各種呈現基元來「繪製」您的視圖。由於這種抽象級別,卡布奇諾可以利用最佳的渲染方法,而不是在某種程度上與CSS和HTML耦合。

至於SproutCore,可以說更貼近「金屬」。在進行純視圖渲染時,您可以使用提供一定抽象度的渲染上下文對象,但最終直接注入HTML並添加類名來應用CSS。即使您的視圖已經呈現並且您想要基於事件操作視圖的某些部分,您也可以直接訪問DOM元素並操作其屬性。取決於你來自哪裏,看起來好壞。適用於那些習慣於使用CSS和HTML的用戶,以及更直接地控制視圖呈現和樣式的方式。如果您想一般呈現視圖,以便根據瀏覽器允許的內容(HTML/CSS,SVG,HTML5 canvas等)使用最佳呈現方法,那麼這很糟糕。但是,請注意,未來有計劃讓SproutCore擁有更抽象的渲染方法,但仍然允許您直接使用HTML和CSS,如果您願意的話。所以你最終會得到兩全其美的。

現在,就兩個框架附帶的股票UI小部件/視圖而言,它們都有很多開箱即用的功能,以便讓您順利進行。按鈕,標籤,列表,分段視圖,單選按鈕,滾輪等 - 他們都在那裏。因此,可以肯定地說你在這兩個陣營都很好。

回想一下,讓我們現在討論易用性。對我而言,易用性取決於您在JavaScript,HTML,Obj-C,Cocoa,其他MVC框架,文檔和社區支持方面的個人經驗。如果您從未與Cocoa合作過,或者從未構建過甲板或類iPad應用程序,那麼無論您選擇哪種框架,都可以說您將擁有一點學習曲線。這就是說,你不知道和想學的東西可以通過每個框架各自的社區和文檔獲得。兩者都有一個或另一個活躍的社區,所以如果你被困在某個地方,你不會被冷落。至於文檔,卡布奇諾,毫無疑問,佔上風。 SproutCore的文檔是缺乏的,但代碼庫至少完全評論。 SproutCore社區完全瞭解需要更新的文檔,目前正在處理這些文檔,因此請繼續檢查。

最後,您提到了兩個框架的長期預測。摩托羅拉購買卡布奇諾框架是公共知識,因此您肯定有一家大公司支持其增長和長壽,或者至少現在看起來就像這樣。至於蘋果和SproutCore,我個人不能爲他們說話,但蘋果並不擁有這個框架。有許多公司和各種個人都以某種方式使用並回饋給框架。這可能會讓一些人和公司對那些正在尋找SproutCore的人感到停頓或不舒服,因爲框架開發的有機性更強,但我認爲這不是問題。我的感覺是,這兩種框架都會存在很長時間,特別是現在更多的人正在研究使用開源框架開發下一代桌面和iPad應用程序。而且,嘿,框架之間的競爭是很好的 - 讓每個人都在各自的腳趾上:-)。

希望這些信息能幫助您決定!

乾杯,

邁克

+13

在過去的10個月裏,您對上述兩個框架的看法是否發生了變化? SproutCore的渲染變得更抽象了嗎?摩托羅拉280North對卡布奇諾的收購有效嗎?我現在試圖在兩者之間做出決定,你的比較非常好。所以我想知道是否有任何值得一提的重大變化。 – SpacyRicochet 2011-09-09 14:56:02

+3

我非常感謝這個答案的任何更新。近2年後的情況現在可能會有所不同。 – 2012-12-22 19:37:52

3

從卡布奇諾網站:

「在現有框架的另一端像SproutCore的技術,同時SproutCore所具有相似的目標,卡布奇諾,它需要一個distincly不同的方法,它仍然依賴於HTML。 CSS,JavaScript,Prototype和全新的獨特API集合,它還需要特殊的開發軟件和繁瑣的編譯步驟,我們認爲這是錯誤的方法。 HTML,你永遠不會編寫一行CSS,你永遠不會與DOM交互,我們只要求開發人員學習一種技術,Objective-J和一組API,另外,這些技術nologies是衆所周知的和現有的很好理解的實現。 「

因此,Cappuccino似乎沒有/需要任何構建工具,並且完全將瀏覽器從開發者手中抽象出來,而在Sproutcore中你會得到構建工具(例如開發服務器),開發人員應該知道DOM是什麼。

+1

更具體地說,卡布奇諾不會強迫您在每次更改之後進行構建,但它確實包含大量旨在優化最終版本產品的工具。 – 2010-11-26 22:12:54

3

邁克爾Cohens答案几乎涵蓋一切,因爲它是非常詳細。

我一直在爲過去3周的決定而苦苦掙扎。我已經閱讀了網頁上關於這兩個框架的所有內容,並且我已經寫了大量源代碼樣本,但仍然無法做出決定。下面的問題讓我從一個框架跳到另一個框架,繼續讓我的決定變得更加艱難。

  1. Sproutcore擁有比一杯卡布奇諾更好的數據存儲空間。

  2. Sproutcore使用了比卡布奇諾目前更好的綁定。卡布奇諾也有kvc/kvo的支持,但綁定並不完全在那裏。例如,在sproutcore中,您可以非常容易地使用綁定和ArrayController實現增量加載,而在另一方面卡布奇諾卻不那麼直接。當然,卡布奇諾提供了CPTableView DataStore api,它非常乾淨,可以實現類似的結果,而不是綁定。它在覈心數據之前做了什麼可可。儘管如此,綁架仍然在卡布奇諾上進行着。

  3. 根據我個人的口味,卡布奇諾有更好的視角api。儘管我習慣於開發html和DOM,但我更喜歡將DOM完全抽象出來並擺脫css的想法。

  4. 對我來說真正重要的一個問題是在sproutcore中缺少一個好的TableView。目前SC.TableView是在alpha中,它根本沒有性能。我不知道sproutcore中tableview的時間軸。我試着問irc sproutcore頻道,但沒有得到滿意的答案。另一方面卡布奇諾有一個偉大的和非常優化的表格視圖。

  5. 我發現在卡布奇諾上寫的比在sproutcore上寫的更多真實世界的應用程序。還有一個非常漂亮的全面應用程序,由卡布奇諾作爲源樣本提供,非常有幫助。退房http://githubissues.heroku.com/

儘管我已經在Objective-C沒有經驗,我更喜歡純JS語法,我可能會跟卡布奇諾去我的當前項目,並希望SproutCore的出來在未來更好的表視圖。

16

我想談談關於客觀-J邁克爾提出的意見。

如果你下降到JavaScript而不是Objective-j,你不會失去任何東西。在所有的實際情況中,這種區別是很難做出的,特別是在我們有免費橋接類的情況下(更多的是這一點)。目標-j實際上只是js的一個簡單包裝。它提供了經典的繼承,它傳統上被實現爲一種語言特性,sproutcore實現爲一種框架特性,它還提供了代碼導入,訪問器生成,靜態範圍以及對消息零的支持。

如果你願意,可以通過傳統的點語法訪問Objective-j實例變量......我喜歡這樣想:一旦你開始編寫一個方法,你就主要編寫JavaScript。也就是說,循環,變量,函數,閉包等都只是javascript。你不會因爲掉下來而失去任何東西,這正是語言設計的方式。

我們通過「免費橋接」我們的一些類CPDate,CPArray,CPException,CPString以及可能更多的我不記得的內容來進一步推進。免費橋接意味着CPArray是一個原生的js數組,而一個原生的js數組是一個CPArray,因此您可以互換地使用兩個世界的方法和函數。

因此,例如,將能做到:

var foo = []; 
[foo addObject:"bar"]; 
foo.push("2nd push"); 
var value = foo[0]; 
var value2 = [foo objectAtIndex:0]; 

alert(value === value2); //true 

正如你可以看到我使用的是客觀-J語法和句法的js一起......你可以,如果這想象的力量。

爲了確保沒有混淆,最後我想解決它:objective-j在瀏覽器中被解析。它不需要事先編譯(儘管我們提供編譯工具以備您準備部署應用程序時使用)。

我認爲有些人被目標-j不必要地推遲,好像它是一些需要時間學習的怪獸,而objective-j爲js增加了很多很棒的功能,而實際上學習它們不會如果你已經熟悉面向對象的編程,那麼真的會佔用你一天中最好的一部分,顯然如果你來自可可,你就可以直接進入。