代码之家  ›  专栏  ›  技术社区  ›  Sheehan Alam

芽核与卡布奇诺

  •  46
  • Sheehan Alam  · 技术社区  · 15 年前

    除了Javascript和Objective-J的语言差异之外,卡布奇诺在Sproutcore上提供了什么好处,在您的体验中反之亦然?

    从长期预测来看,SproutCore是否比卡布奇诺更“受支持”,因为它得到了苹果的支持?

    我想在两者之间做出选择。我对JavaScript和Objective-C都很熟悉。

    5 回复  |  直到 11 年前
        1
  •  65
  •   Marcelo Cantos    15 年前

    这是一个有趣的问题,并且在各种消息组、Twitter甚至IRC上频繁出现。有几种方法可以评估Sproutcore与卡布奇诺的对比,但是,也许,人们所看到的一些直接的能力是:

    1)各自的功能集
    2)使用方便
    3)社区支持和文件

    让我们来看第一点——这里是各自的特性集。通过“功能集”,有几种方法可以查看它。从它们拥有的UI小部件的数量来看;将事物连接在一起并与某种后端通信的基本支持;框架的一般架构方法,尽管不一定是“特性”,但仍然很重要;是的,甚至是您可以使用的语言。

    关于语言,我认为重要的是不要忽略正在使用的内容(JS和OBJ-J)。为什么?因为收养和你来自哪里。SproutCore的观点是,JavaScript确实是Web的语言,所以它是用来针对框架编程的。如果javascript在语言方面缺乏OO完整性(适当的对象对象继承等),它将弥补框架中的不足(例如myapp.foo=sc.object.extend(…))。卡布奇诺来自不同的角度。他们使用obj-j作为JS的主要语言增强,以便注入JS所缺少的语言特性;这不是直接将这些语言特性注入框架(cappuccino)本身。当然,正如之前卡布奇诺的人们所指出的,您仍然可以使用JS对卡布奇诺进行编程,但是,您错过了obj-j提供的功能。卡布奇诺社区注意:如果我错了,请纠正我:—)。最后,如果你是一个已经熟悉obj-c的人,那么obj-j可能更像是你的茶。嘿,甚至索尼现在也明显在跳上整个obj-c的潮流,与他们的移动平台进行对抗。

    看看这两个框架的体系结构,他们都看了苹果的Cocoa框架,以某种形式寻求指导/灵感。卡布奇诺把可可完全带到心脏,基本上移植了可可原料药。再说一次,如果你是从使用可可开发苹果应用程序来的,那么你可能会觉得自己很自在。另一方面,SproutCore从可可中获得了灵感,因为可可的感觉是对的。对于纯粹的体系结构,它们都遵循MVC,它们都使用Cocoa风格的绑定,它们都有一个数据存储机制,它们都有各自的呈现和组合UI小部件/视图的风格。

    对我来说,呈现视图是一个特别重要的领域。这两个框架都有一些级别的抽象,以便将您从直接处理CSS和HTML中删除,即使在一天结束时,它们必须呈现给Web浏览器最终理解的内容。

    在卡布奇诺方面,它们完全从你那里抽象出CSS和HTML。相反,您可以使用框架的各种渲染原语“绘制”视图。由于这一抽象层次,卡布奇诺可以利用可用的最佳呈现方法,而不是某种程度上将您与CSS和HTML耦合起来。

    至于SproutCore,可以说,你是在向“金属”靠拢。在对视图进行纯呈现时,可以使用呈现上下文对象,该对象提供一定程度的抽象,但最终,您将直接注入HTML并添加类名以应用CSS。即使您的视图已经呈现,并且您希望基于事件操作视图的某些部分,您也可以直接访问DOM元素并操作它们的属性。这取决于你来自哪里,可能看起来是好是坏。对于那些习惯于使用CSS和HTML,并且更喜欢直接控制视图的呈现和样式的人来说是很好的。如果要基于浏览器允许的内容(HTML/CSS、SVG、HTML5画布等)来使用最佳渲染方法,则不好。但是,需要注意的是,未来有计划让SproutCore有一种更抽象的呈现方法,但是如果您选择的话,仍然允许您直接使用HTML和CSS。所以你最终会得到两个世界中最好的。

    现在,对于两个框架附带的stock-ui小部件/视图,它们都有很多现成的功能,以便让您继续使用。按钮、标签、列表、分段视图、单选按钮、滚动条等——它们都在那里。因此,可以说你在两个营地都很好。

    回到过去,我们现在讨论一下易用性。对我来说,易用性是建立在您个人使用javascript、html、obj-c、cocoa、其他MVC框架、文档和社区支持的经验基础上的。如果你从未使用过Cocoa,或从未开发过DeckTop或类似iPad的应用程序,那么不管你选择什么框架,你都会有一段学习曲线。也就是说,您不知道和想要学习的内容可以通过每个框架各自的社区和文档获得。两者都有活跃的社区,所以如果你被困在某个地方,你不会被冷落。对于医生来说,卡布奇诺无疑占了上风。SproutCore缺少文档,但代码库至少有完整的注释。SproutCore社区完全了解需要更新的文档,目前正在处理这些文档,因此请继续检查。

    最后,您提到了这两个框架的长期预测。众所周知,摩托罗拉购买了卡布奇诺框架,所以你肯定有一家大公司支持它的发展和寿命,或者至少目前看起来是这样。至于苹果和SproutCore,我个人不能代表他们发言,但苹果并不拥有这个框架。有许多公司和个人都在某种程度上使用并为框架做出贡献。这可能会让一些人和公司因框架开发的更有机性而暂停或不适,但我不认为这是一个问题。我的感觉是这两个框架都将存在很长一段时间,特别是现在越来越多的人正在考虑使用开源框架开发下一代桌面和iPad应用程序。而且,嘿,框架之间的竞争是好的——让每个人都保持各自的警觉。

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

    干杯,

    迈克

        2
  •  16
  •   hvgotcodes    15 年前

    我想谈谈关于Objective-J Michael的评论。

    如果你放弃了Objective-J而选择了Javascript,你就不会失去任何东西。事实上,区别是很难区分的,特别是在我们有免费桥接类的情况下(更多的是这样)。

    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添加了许多伟大的功能,如果你已经熟悉面向对象的Pro,那么学习它们并不会真正让你花上一天中更好的时间。编程,很明显,如果你来自可可,你就可以直接跳进去。

        3
  •  4
  •   Elias    15 年前

    我写了一篇关于“卡布奇诺vs.斯普兰科”的博客文章。这不是技术比较,而是比较其他有趣的数据。

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

        4
  •  3
  •   hvgotcodes    15 年前

    从卡布奇诺网站:

    “现有框架的另一端是像SproutCore这样的技术。虽然SproutCore的目标与卡布奇诺相似,但它采用了一种截然不同的方法。它仍然依赖于HTML、CSS、JavaScript、原型和一组全新且独特的API。它还需要特殊的开发软件和繁琐的编译步骤。我们认为这是错误的做法。

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

    因此,卡布奇诺似乎没有/不需要任何构建工具,完全将浏览器从开发人员那里抽象出来。而在SproutCore中,您得到了构建工具(例如开发服务器),开发人员应该知道什么是DOM。

        5
  •  3
  •   Dimitris Stefanidis    15 年前

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

    在过去的三周里,我一直在为一个决定苦苦挣扎。我已经阅读了网络上关于这两个框架的所有内容,我已经用这两个框架编写了很多源代码示例,但仍然不能做出决定。以下问题使我从一个框架跳到另一个框架,并不断作出更艰难的决定。

    1. SproutCore有比卡布奇诺更好的数据存储API。

    2. SproutCore比目前的卡布奇诺更好地利用绑定。卡布奇诺也支持kvc/kvo,但是绑定还没有完全实现。例如,在SproutCore中,您可以非常容易地使用绑定和ArrayController实现增量加载,而在Cappuccino中则不那么简单。当然,cappuccino提供了cpTableView数据存储API,它非常干净,可以实现类似的结果,而不需要绑定。这是可可在核心数据发布之前所做的。不过卡布奇诺的包扎工作一直在进行。

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

    4. 对我来说,一个真正重要的问题是在SproutCore中缺少一个良好的表视图。当前sc.tableview是alpha格式的,根本没有执行。我不知道SproutCore中TableView的时间表。我试着在IRC SproutCore频道上提问,但没有得到满意的回答。另一方面,卡布奇诺有一个伟大的和非常优化的表观。

    5. 我发现写在卡布奇诺上的应用比写在SproutCore上的要多。卡布奇诺还提供了一个相当不错的全面应用程序,作为源代码样本,非常有用。退房 http://githubissues.heroku.com/ .

    尽管我在Objective-C方面没有经验,而且我更喜欢纯JS语法,但我可能会在我当前的项目中使用卡布奇诺,希望SproutCore将来能有更好的表视图。

    推荐文章