(JamesQIU:译自 Exploring Lift 第一章,已经全部译完,以后有时间且有人感兴趣再贴其他的)

 Lift是一个好框架,能构建引人入胜的web应用的。Lift简单灵活的框架设计能够轻松使用一些强大的技术(如CometAjax),这虽然听上去象陈词滥调,但以我们的经验,Lift能让开发者更关注开发中有趣的东西。本书的最终目的是,Lift能够创建出任意想得到的web 应用

1.1   为何选择Lift

    我们已经有strutsTapestryRails等框架了,为啥又来一个?Lift是否真的能够解决其他一些框架使用中的问题和困难吗?答案是肯定、确定以及一定的。Lift博采其他框架之长,并自创很多新思想,以成就Lift之强大,同时Lift规避了其他框架的缺点。Lift采用“惯例优于配置”的思想,缺省帮你做了不多不少刚刚好的事,自定义也很简易。Lift没用一堆XML来配置,甚至没用单个XML来进行基本配置,仅仅在web.xml中配置一个LiftFilter即可,自定义放在Boot.scala(缺省不用改动),代码也不用实现某个接口或者继承某个父类。简单来说,Lift开箱即用,程序员不用做任何不必要的额外工作,以便让工作效率最高。

    Lift强大的一个关键在于采用严格的MVC模式来清楚划分内容展现和程序逻辑。JSP是一项历史悠久但现在还在使用的Java web应用开发技术,JSP中可以混合使用HTMLJava代码,这种做法开始时不错,但在实际使用中很痛苦,内容展现层混入代码使debug和理解页面逻辑难度加大,再者由于html中的代码不是合法的html元素,也难以使用常见的html编辑器进行页面编辑。Lift采用的方法是展现层没有代码但足够灵活,即和Wicket类似的方法在展现层绑定用户生成的数据。Lift的模板用Scalaxml解析器解析,允许嵌套模板、简单数据嵌入、高级数据绑定等,习惯于JSP的用户还能很轻易地自定义tag库(这在JSP中相当麻烦)。

    Lift的另一优点在于使用Scala:一门运行于JVM之上的现代语言,可使用所有的Java现有库,同时Scala具备丰富类型系统、内置xml处理、闭包和高阶函数、高层次的数据结构库。丰富类型系统和类型推断被称作“静态类型的动态语言”,写起来和PythonRuby等动态语言一样省事,但又具备Java等静态语言的编译时类型安全检查。ScalaFPOOP的混合体,可以象HaskellScheme那样使用高阶函数,也可以保持OO组件的模块化和重用。Scala具备FP的不可变性,非常适合编写高并发程序。FPOOP的混合模式可以使之前没有FP经验的程序员逐步采纳FP。以我们的经验,Scala使Lift用更少的代码做更多的事情,从而提高了生产力。

    Lift以简洁和直接的方式支持AjaxCometWeb2.0的高级特性。Lift采用ScalaActor库为Comet推送更新提供消息驱动的框架,在页面中增加Comet支持只需扩展trait以定义一个页面render方法,并在link中增加一个分发更新信息的函数即可,Lift会生成和处理所有后端和页面的Comet推送代码。LiftAjax支持采用Json数据传输(不是xml),任何link功能敲几个键就能转化为Ajax版本。Lift使用一组类自动生成压缩的JavaScript代码(用基本JavaScript、或jQueryYUI产生),你不用在模板中书写JavaScript代码。