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增加了很多很棒的功能,而实际上学习它们不会如果你已经熟悉面向对象的编程,那么真的会占用你一天中最好的一部分,显然如果你来自可可,你就可以直接进入。