你在Scala / Lift开发的经验是什么?

最近我听到很多有关Scala和Lift Web框架的好消息,尤其是来自Foursquare的人,因此我可能会在下一个项目中使用这个技术。

  • 你们是Scala / Lift开发者吗?
  • 你在这个平台上开发的经验是什么?它比Ruby On Rails或Python / Django有什么优势?
  • 你是否认为它是一种可行的技术,在接下来的几年中将会是“值得关注的东西”?

这值得么? 在Scala / Lift平台上分享您的经验。

  1. 我现在正在Scala中执行大部分的工作。 (我应该提一下,我认为斯卡拉是自从前一轮的发明以来最好的事情: – D)

    在我看来,这是唯一真正允许人们select最好的方法来完成某项任务的语言,而且在(更多)面向对象和(更多)function方法之间没有不必要的分歧。

    看看之前所说的语言,我基本上可以看到两个竞争的语言devise阵营:

    • 从面向对象的angular度来看,函数式编程最近受到了一些牵引,并认为:“我们并不真正了解这个function性的东西,而是给我们的语言添加了一些奇特的语法糖,所以我们可以声称它是function性的太!” (例子:Java,Python)

    • 那么从function方面来看,那些认为“那么,我们的function方法远远胜于其他任何东西,面向对象的废话是烦人的,但让我们把一些额外的关键字到我们的语言,这将使我们的语言肯定逃避学术界!” (例子:F#,OCaml)

    Scala的devise人员统一了来自双方的许多方法,并创build了一些devise良好的语言,这是我认为与其他语言最大的不同之处,他们决定采用“Frankenstein”方法编程语言devise。

  2. 在使用Lift完成较小的事情之后,只有Rails和Django的表面经验,我不得不承认,大多数时候,当我想知道为什么Lift中的某些工作与我所期望的有所不同时,这是由于我的期望是有缺陷和提升的方法优越。

    电梯当然不是“简单介绍斯卡拉”,但学习电梯如何工作几乎像在之前学习Scala一样有价值。

    在没有任何逻辑的情况下拥有一个“干净”的观点的能力,对于其他声称相同但没有达到的框架是一个很大的改进。 Scala的XML文字支持可以validation响应的格式。编译器会在编译时certificate,只向客户端发送格式良好的XML。

  3. Lift是可行的技术,目前唯一真正的方法,如果你想build立的Web应用程序看起来,感觉和行为像“真实”的桌面应用程序,而无需自己编写疯狂的代码量。

目前我正在开发我的第二个Lift应用程序 – 它在Lift的最佳位置非常强大 – 非常实时,并发性很强。

第一个我们在与DB层搏斗了几天之后(现在比较好,我被引导去相信),然后去了Play / Scala。 这最大限度地提高了我们团队的现有知识,并使得截止date成为可能。 但是,当我们的项目变得很大时,热代码重新加载几乎不再发生(PermGen一直在运行 – 几乎在任何地方Scala编译都是一个持续存在的问题),而且在不同的地方手动调整方法调用参数和位置安全在网站上相当麻烦。 我们很高兴完成这个任务 – 就像我倾向于findRails 1一样,随着项目规模的增加,速度的增加也随之缩小,最后,在速度/ Spring / XML ++)。

这一次我们一直致力于研究Lift如何做,做正确的事情。 这意味着通过邮件列表进行大量的随意浏览(几个版本的讨论往往是相关的),最重要的是团队的新风尚。 有必要非常强烈地内化这个座右铭:

“这是感觉艰难和重复,我敢打赌,他们做了一个更简单的方法来做到这一点。

到目前为止,Lift并没有让我们失望。 顺便说一句,我不是在谈论像Sitemap和列表连接语法这样的东西 – 你必须在function性的Scala上有一个相当不错的句柄,否则你将无法阅读源代码,甚至不能configuration你的应用程序。

也就是说这不是疯狂的IO monads或其他任何东西,只是一些常见的习惯用法,无论如何你会在几个星期的Scala中find它们。

对我们来说最大的问题是编译周期很慢。 docker需要20秒左右的时间:运行我们的项目,这是一个不同的感觉,其中(工作时)热编译所有的东西。 另一方面,我们实际上是在我们的一位开发者抱怨的时候计算出来的,结果发现虽然Play技术上热门编译了它,但页面在开发模式下仍然花费了12秒的时间。 所以没有什么大的损失,只是感觉有点慢,不得不跳出命令行。

Lift可以让你做很多事情,而且在我们的应用程序中有许多地方(因为它是可用的),我们已经说过了“是的,我们真的希望立即更新到那个页面的所有浏览者,而不是他们后来发现他们已经过时了(想想你曾经同时发布给SO上的人,同样的答案)。COMET无处不在,事实certificate – 这不是一个专家用例,事情是这样的应该可以工作,而Lift则很容易。

我们也喜欢强大的,可编程的安全模型 – 一旦我们将我们的思维转换为“我们必须将每个位置列入白名单,并指定必要的入口条件”,我们就再也看不到另一个会话问题 – 用户会遍历一定的path,从而知道一大堆参数? 就像一个有效的用户名和一个感兴趣的领域或者其他什么? (我有意模糊)。 这可能是一个有状态的框架的一个尴尬的事情,你会希望有一个可用的状态,当用户点击一个页面,而不是(例如)只是要求所有的状态在每个请求进行。

我在升降机上重新拍摄的照片:

这很值得。 不仅要构build您正在尝试构build的应用程序,还要构build您不知道需要的应用程序。

有很多头抓,但不是很多的代码。 而当它的工作,真的有用。 它是快速,干净,所有的奇迹,它在浏览器和服务器之间工作,我从来没有看到它感到困惑。

我正在开发企业财务应用程序超过6个月,我是JAVA程序员前。 我注意到了几点,可以帮助你:

  1. 我写了很less的代码行( 很好的例子 )

  2. 电梯周围有一个非常亲切的社区 。 他们总是试图提供一个实质性的答案。 我没有任何不愉快的经历。 即使他们愿意为Lift中的新function提供新的build议。 他们批准了我的两个build议!

  3. 每6-8周宣布一次Lift的新稳定小版本。 新的里程碑是每两周一次。

  4. Lift是Web应用程序的绝佳框架。 您可以阅读有关Lift的七个主要function 。

  5. 提升默认的ORM模块 – Mapper不适用于大量和高级数据库模型,这些模型有很多外键和约束条件。 我们不得不使用Squeryl。

我无法想象我现在必须返回到JAVA代码。 但我的小build议是尝试编写一些简单的应用程序,你会看到。