SproutCore与卡布奇诺

除了Javascript和Objective-J之间的语言差异之外,卡布奇诺还提供了什么优于SproutCore,反之亦然?

就长期预测而言,SproutCore比卡布奇诺更受“支持”,因为它得到了苹果的支持?

我正试图在两者之间做出select。 我熟悉JavaScript和Objective-C。

这是一个有趣的问题,在各种消息组,twitter,甚至IRC上都经常出现。 有几种方法可以评估SproutCore与卡布奇诺,但是也许有些人看到的是:

1)他们各自的function集
2)易于使用
3)社区支持和文件

让我们看看第一点 – 各自的function集。 通过“function集”,有几种方法来看待它。 从他们拥有的UI小部件的数量来看 将事物连接在一起并与某种后端进行交stream的基础支持; 框架的总体架构方法尽pipe不一定是“特征”,但仍然重要; 是的,甚至可以使用的语言。

关于语言,我认为重要的是不要忽略正在使用的东西(JS与Obj-J)。 为什么? 由于采用和你来自哪里。 SproutCore从JavaScript的确是Web的语言的angular度来看,所以它就是你用来对框架进行编程的东西。 如果JavaScript缺乏语言OO完整性(适当的对象 – 对象inheritance等),则可以在框架中弥补(例如MyApp.Foo = SC.Object.extend({…}))。 卡布奇诺从不同的angular度进来。 他们使用Obj-J作为JS的主要语言增强,以注入JS缺失的语言特征; 而不是将这些语言特征直接注入框架(卡布奇诺)本身。 当然,正如在卡布奇诺以前注意到的人们一样,你仍然可以用JS来对抗卡布奇诺,但是,那么你错过了Obj-J所提供的东西。 请注意卡布奇诺社区:请纠正我,如果我错了:-)。 最后,如果你是一个熟悉Obj-C的人,那么Obj-J可能就是你的一杯茶。 嘿,即使是索尼公司显然现在已经在整个Obj-C的stream行趋势上开始针对他们的移动平台发展:-P。

看看这两个框架的架构,他们都以某种forms看待了苹果的Cocoa框架的引导/启发。 卡布奇诺充分把cocoa充满了心,基本移植了Cocoas API。 再次,如果你是从使用Cocoa开发苹果应用程序开始的,那么你可能会觉得自在。 另一方面SproutCore从Cocoa那里得到了灵感。 至于纯体系结构,他们都遵循MVC,他们都使用Cocoa风格的绑定,他们都有一个数据存储机制,他们都有自己的风格的渲染和组成UI部件/视图。

对我来说,意见的呈现是一个特别重要的领域。 这两个框架都具有一定的抽象层次,以避免直接处理CSS和HTML,尽pipe在一天结束时他们必须渲染到Web浏览器最终理解的内容。

在卡布奇诺方面,他们完全抽象出你的CSS和HTML。 而是使用框架的各种呈现基元来“绘制”您的视图。 由于这种抽象级别,卡布奇诺可以利用最好的渲染方法,而不是在某种程度上与CSS和HTML耦合。

至于SproutCore,可以说更接近“金属”。 在进行纯粹的视图渲染时,可以使用提供某种程度抽象的渲染上下文对象,但最终直接注入HTML并添加类名来应用CSS。 即使您的视图已经被渲染,并且您想要基于某个事件来操作视图的某些部分,您可以直接访问DOM元素并操作其属性。 根据你来自哪里可能看起来好或坏。 对于那些习惯于使用CSS和HTML的人来说,并且更直接地控制视图的渲染和样式,这是很好的select。 如果您想一般地渲染视图,以便根据浏览器允许的内容(HTML / CSS,SVG,HTML5 canvas等)使用最佳的渲染方法,那么这是不好的。 但是,请注意,未来有计划使SproutCore具有更抽象的渲染方法,但仍允许您直接使用HTML和CSS,如果您愿意的话。 所以你最终会得到两全其美的。

现在,就两个框架来说,股票用户界面小部件/视图都有了 – 它们都有很多开箱即用的function。 button,标签,列表,分段视图,单选button,滚轮等 – 他们都在那里。 因此,可以肯定地说,你们两个阵营都很好。

回顾一下,现在让我们来讨论一下易用性。 对我来说,易用是基于你自己的使用JavaScript,HTML,Obj-C,Cocoa,其他MVC框架,文档和社区支持的个人经验。 如果你从来没有和cocoa一起工作过,或者从来没有制作过类似苹果平板电脑或者类似iPad的应用程序,那么无论你select什么样的框架,你都会有一点点的学习曲线。 这就是说,你不知道和想学的东西可以通过每个框架的社区和文档获得。 两者都有一个或另一个活跃的社区,所以如果你被困在某个地方,你将不会被冷落。 至于文件,卡布奇诺,毫无疑问,占上风。 SproutCore的文档是缺乏的,但代码库至less完全评论。 SproutCore社区充分意识到需要更新的文档,目前正在处理的内容,请继续检查。

最后,你提到了这两个框架的长期预测。 摩托罗拉买卡布奇诺框架是公开的知识,所以你肯定有一个大公司支持它的发展和长寿,或者至less现在看起来就是这样。 至于苹果和SproutCore,我个人不能为他们说话,但苹果并不拥有这个框架。 有许多公司和各种各样的人都以某种方式使用和贡献回框架。 这可能会让一些人和公司对那些正在寻找SproutCore的人感到停顿或不舒服,因为框架的发展更具有机构性,但是我不认为这是一个问题。 我的感觉是,这两个框架将在很长一段时间,尤其是现在更多的是在开发下一代桌面和iPad应用程序使用开源框架。 嘿,框架之间的竞争是好的 – 让每个人都在各自的脚趾:-)。

希望这些信息能帮助你做出决定!

干杯,

麦克风

我想谈谈关于客观的评论迈克尔。

如果你下降到JavaScript而不是Objective-j,你不会失去任何东西。 在所有的实际情况中,这种区别是很难做出的,尤其是在我们有免费桥接class的情况下(更多的是这一点)。

Objective-j实际上只是js的简单包装。 它提供了经典的inheritance,传统上被实现为一种语言特性,sproutcore实现了一个框架特性,它还提供了代码导入,访问器生成,静态范围,以及消息支持。

Objective-j的实例variables可以通过传统的点语法来访问,如果你想…我喜欢这样想:一旦你开始写一个方法,你主要是写JavaScript。 也就是说,循环,variables,函数,闭包等都只是javascript。 你不会失去任何东西,这正是语言devise的方式。

我们通过“免费桥接”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 

正如你可以看到我一起使用objective-j语法和js语法…你可以想象如果这个权力。

最后我想说明一下,只是为了确保没有混淆:objective-j在浏览器中被parsing。 它不需要事先编译(虽然我们提供了编译工具,当你准备好部署你的应用程序)。

我认为有些人是不必要地被目标j推迟,好像这是一个需要时间学习的怪兽,而objective-j为js增加了很多很棒的function,实际上学习它们并不会真的把你如果你已经熟悉面向对象的编程,那么一天中最好的一部分,显然如果你来自cocoa,你就可以直接进入。

我写了一篇关于“卡布奇诺与萌芽”的博客文章。 这不是一个技术比较,但比较其他有趣的数据。

http://elii.info/2010/11/cappuccino-vs-sproutcore/

从卡布奇诺网站:

“现有框架的另一端是SproutCore这样的技术,而SproutCore与Cappuccino有相似的目标,它需要一个截然不同的方法,它仍然依赖于HTML,CSS,JavaScript,Prototype和一个全新的独特集合还需要专门的开发软件和繁琐的编译步骤,我们认为这是错误的方法。

用卡布奇诺,你不需要知道HTML。 你永远不会写一行CSS。 你永远不会与DOM交互。 我们只要求开发人员学习一种技术,Objective-J和一套API。 此外,这些技术是众所周知的,现有的很好理解的实现。 开发人员可以利用数十年的集体经验来加速构build丰富Web应用程序的步伐。“

因此,卡布奇诺似乎不需要任何构build工具,并将浏览器完全从开发者处抽象出来。 而在Sproutcore中,您可以获得构build工具(例如开发服务器),开发人员应该知道DOM是什么。

由于非常详细,迈克尔·科恩的回答几乎涵盖了一切。

我一直在为过去三周的决定而苦苦挣扎。 我已经阅读了网页上关于这两个框架的所有内容,而且我已经写了很多源代码样本,但仍然无法做出决定。 下面的问题让我从一个框架跳到另一个框架,继续让我的决定更加艰难。

  1. Sproutcore拥有比卡布奇诺更好的数据存储空间。

  2. Sproutcore使用绑定​​比卡布奇诺目前更好。 卡布奇诺也有kvc / kvo的支持,但绑定并不完全在那里。 例如在sproutcore中,您可以非常容易地使用绑定和ArrayController实现增量加载,而在另一方面卡布奇诺则不那么简单。 当然,卡布奇诺提供的CPTableView DataStore API是非常干净的,可以实现类似的结果,而不是绑定。 它核心数据之前做了什么cocoa。 不过,卡布奇诺一直在进行绑定。

  3. 卡布奇诺根据我个人的口味有更好的视angular。 虽然我习惯于开发HTML和DOM,但我更喜欢将DOM完全抽象出来并去掉CSS的想法。

  4. 一个对我来说非常重要的问题是在sproutcore中缺less一个好的TableView。 目前SC.TableView是在阿尔法,它不是性能完全。 我不知道在sproutcore tableview的时间表。 我试图问在irc sproutcore频道,但没有得到满意的答案。 另一方面卡布奇诺有一个伟大的和非常优化的表格视图。

  5. 我发现在卡布奇诺上写的比在sproutcore上写的更多真实世界的应用程序。 还有一个相当不错的全面的应用程序,是由卡布奇诺提供的源样本,是非常有帮助的。 检查出http://githubissues.heroku.com/

尽pipe我没有Objective-C的经验,但我更喜欢纯粹的js语法,我可能会用我的当前项目的卡布奇诺(cappuccino),并希望sproutcore将来会有更好的表格视图。