除了 Javascript 与 Objective-J 的语言差异之外,Cappuccino 与 SproutCore 相比有什么好处,反之亦然?
从长期预测来看,SproutCore 是否比 Cappuccino 更“受支持”,因为它得到了苹果的支持?
我试图在两者之间做出选择。我对 JavaScript 和 Objective-C 都很熟悉。
除了 Javascript 与 Objective-J 的语言差异之外,Cappuccino 与 SproutCore 相比有什么好处,反之亦然?
从长期预测来看,SproutCore 是否比 Cappuccino 更“受支持”,因为它得到了苹果的支持?
我试图在两者之间做出选择。我对 JavaScript 和 Objective-C 都很熟悉。
这是一个有趣的问题,并且在各种消息组、推特甚至 IRC 上都经常出现。有几种方法可以评估 SproutCore 与 Cappuccino 的区别,但也许人们看到的一些直接的 caparisons 如下:
1) 它们各自的功能集
2) 易用性
3) 社区支持和文档
让我们看看第一点——有各自的功能集。通过“功能集”,有几种方法可以查看它。从他们拥有的 UI 小部件的数量来看;将事物连接在一起并与某种后端进行通信的基础支持;框架的一般架构方法,虽然不一定是“特性”,但仍然很重要;而且,是的,甚至是您可以使用的语言。
关于语言,我认为重要的是不要忽略正在使用的内容(JS 与 Obj-J)。为什么?因为收养和你来自哪里。SproutCore 从 JavaScript 确实是 Web 语言的角度出发,因此您可以使用它来针对框架进行编程。JavaScript 缺乏语言 OO 完整性(适当的对象-对象继承等),它在框架中弥补了(例如 MyApp.Foo = SC.Object.extend({...}))。卡布奇诺从不同的角度进来。他们使用 Obj-J 作为 JS 的主要语言增强,以注入 JS 缺少的语言特性;这而不是将这些语言功能直接注入框架(Cappuccino)本身。当然,正如 Cappuccino 的人们之前所指出的,您仍然可以使用 JS 对 Cappuccino 进行编程,但是,那么,您就错过了 Obj-J 提供的功能。卡布奇诺社区注意事项:如果我错了,请纠正我:-)。最后,如果您是已经熟悉 Obj-C 的人,那么 Obj-J 可能更适合您。嘿,甚至索尼现在显然也加入了整个 Obj-C 的潮流,以针对他们的移动平台进行开发:-P。
查看这两个框架的架构,他们都以一种或另一种形式查看了 Apple 的 Cocoa 框架以获取指导/灵感。Cappuccino 完全把 Cocoa 放在心上,并且基本上移植了 Cocoas API。同样,如果您是使用 Cocoa 在 Apple 中开发应用程序的,那么您可能会有宾至如归的感觉。另一方面,SproutCore 从 Cocoa 中汲取灵感,感觉不错。至于纯架构,它们都遵循 MVC,它们都使用 Cocoa 样式的绑定,它们都有数据存储机制,并且它们都有各自的渲染和组合 UI 小部件/视图的风格。
对我来说,视图的呈现是一个特别重要的领域。这两个框架都有一定程度的抽象,以使您无需直接处理 CSS 和 HTML,即使最终它们必须呈现 Web 浏览器最终能够理解的内容。
在 Cappuccino 方面,它们完全从您那里抽象出 CSS 和 HTML。相反,您使用框架的各种渲染原语来“绘制”您的视图。由于这种抽象级别,Cappuccino 可以利用可用的最佳渲染方法,而不是在某种程度上将您与 CSS 和 HTML 耦合。
至于 SproutCore,可以这么说,您正在渲染更接近“金属”。在对视图进行纯渲染时,您会使用提供一定程度抽象的渲染上下文对象,但最终,您是直接注入 HTML 并添加类名以应用 CSS。即使您的视图已经被渲染并且您想要基于事件来操作视图的某些部分,您也可以直接访问 DOM 元素并操作它们的属性。根据您来自哪里,这可能看起来好或坏。适合那些习惯使用 CSS 和 HTML 并喜欢更直接地控制视图如何呈现和样式的人。如果您想根据浏览器允许的内容(HTML/CSS、SVG、HTML5 画布等)一般地渲染视图以使用最佳渲染方法,那就不好了。但是,请注意,未来计划让 SproutCore 拥有更抽象的渲染方法,但如果您愿意,仍然允许您直接使用 HTML 和 CSS。所以你最终会得到两全其美的。
现在,至于这两个框架附带的库存 UI 小部件/视图——它们都有很多开箱即用的功能,可以让您继续前进。按钮、标签、列表、分段视图、单选按钮、滚动条等——它们都在那里。因此,可以肯定地说你在两个阵营都很好。
回过头来,现在让我们讨论一下易用性。对我来说,易用性是基于您使用 JavaScript、HTML、Obj-C、Cocoa、其他 MVC 框架、文档和社区支持的个人经验。如果您从未使用过 Cocoa,或者从未构建过类似桌面或 iPad 的应用程序,那么可以公平地说,无论您选择哪种框架,您都会有一些学习曲线。话虽如此,您不知道和想学习的内容可以通过每个框架各自的社区和文档获得。两者都有一个活跃的社区,所以如果你被困在某个地方,你也不会被冷落。至于医生,无可否认,卡布奇诺占据了上风。缺少 SproutCore 的文档,但代码库至少有完整的注释。
最后,您提到了对这两个框架的长期预测。众所周知,摩托罗拉购买了 Cappuccino 框架,所以你肯定有一家大公司支持它的增长和长寿,或者至少现在看起来是这样。至于 Apple 和 SproutCore,我个人不能代表它们,但 Apple 并不拥有该框架。有许多公司和各种个人都以某种方式使用并回馈该框架。由于框架开发的更加有机的性质,这可能会让一些人和公司对那些正在关注 SproutCore 的人感到暂停或不适,但我不认为这是一个问题。我的感觉是这两个框架都会存在很长时间,尤其是现在越来越多的人正在考虑使用开源框架开发下一代桌面和 iPad 应用程序。而且,嘿,框架之间的竞争是好的——让每个人都保持各自的警觉:-)。
希望这些信息可以帮助您做出决定!
干杯,
麦克风
我想谈谈关于objective-j Michael 的评论。
如果你使用 JavaScript 而不是 Objective-j,你不会失去任何东西。实际上,区分有点困难,尤其是在我们有免费桥接课程的情况下(稍后会详细介绍)。
Objective-j 实际上只是对 js 的一个薄包装。它提供了传统上作为语言特性实现的经典继承,sproutcore 将其作为框架特性实现,它还提供代码导入、访问器生成、静态作用域以及对消息传递 nil 的支持。
如果您愿意,可以通过传统的点语法访问 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
如您所见,我同时使用了objective-j 语法和js 语法……您可以想象这样的力量。
最后我要说的是,只是为了确保没有混淆:objective-j 在浏览器中被解析。它不需要事先编译(尽管我们为您准备好部署应用程序提供了编译工具)。
我认为有些人不必要地被 Objective-j 推迟了,好像它是一些需要时间来学习的怪物,虽然 Objective-j 为 js 添加了很多很棒的功能,但真正学习它们并不会真正带你如果您已经熟悉面向对象的编程,那么一天的美好时光,显然,如果您来自可可,您将能够直接进入。
我写了一篇关于“cappuccino vs. sproutcore”的博客文章。这不是技术比较,而是比较其他有趣的数据。
From the Cappuccino website:
"On the other end of the existing frameworks are technologies like SproutCore. While SproutCore set out with similar goals to Cappuccino, it takes a distincly different approach. It still relies on HTML, CSS, JavaScript, Prototype, and an entirely new and unique set of APIs. It also requires special development software and a cumbersome compilation step. We think this is the wrong approach.
With Cappuccino, you don't need to know HTML. You'll never write a line of CSS. You don't ever have interact with DOM. We only ask developers to learn one technology, Objective-J, and one set of APIs. Plus, these technologies are implementations of well known and well understood existing ones. Developers can leverage decades of collective experience to really accelerate the pace of building rich web applications."
So it seems that Cappuccino does not have/need any build tools, and completely abstracts the browser away from the developer. Whereas in Sproutcore you get build tools (a development server, for example) and the developer should be somewhat aware of what DOM is.
迈克尔科恩斯的回答几乎涵盖了所有内容,因为它非常详细。
在过去的 3 周里,我一直在为一个决定而苦苦挣扎。我已经阅读了网络上关于这两个框架的所有内容,并且我已经编写了很多关于这两个框架的源示例,但仍然无法做出决定。以下问题让我从一个框架跳到另一个框架,并让我的决定变得更加艰难。
Sproutcore 拥有比卡布奇诺更好的数据存储 API。
Sproutcore 比目前的卡布奇诺更好地利用绑定。Cappuccino 也有 kvc/kvo 支持,但绑定还不完全存在。例如,在 sproutcore 中,您可以非常轻松地使用绑定和 ArrayController 实现增量加载,而在卡布奇诺中则不那么简单。当然,cappuccino 提供了 CPTableView DataStore api,它非常干净,并且可以实现类似的结果,只是不需要绑定。它是可可在核心数据之前所做的。不过,卡布奇诺一直在研究绑定。
卡布奇诺根据我个人口味有更好的view api。虽然我习惯于开发 html 和 DOM,但我更喜欢将 DOM 完全抽象出来并摆脱 css 的想法。
对我来说真正重要的一个问题是在 sproutcore 中缺少一个好的 TableView。目前 SC.TableView 处于 alpha 阶段,它根本没有性能。我不知道 sproutcore 中 tableview 的时间表。我尝试在 irc sproutcore 频道上提问,但没有得到满意的答案。另一方面,卡布奇诺有一个很棒且非常优化的表格视图。
我发现在 cappuccino 上编写的真实世界应用程序比在 sproutcore 上编写的应用程序更多。卡布奇诺还提供了一个相当不错的完整应用程序作为源示例,非常有用。查看http://githubissues.heroku.com/。
尽管我在 Objective-c 方面没有经验,而且我更喜欢纯 js 语法,但我可能会在我当前的项目中使用卡布奇诺,并希望未来 sproutcore 能提供更好的表格视图。