InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

Lilu:Rails Mockup驱动开发之道

作者 Sebastien Auvray 译者 高昂 发布于 2007年7月9日

领域
架构 & 设计,
语言 & 开发
主题
Ruby ,
设计 ,
Ruby on Rails
标签
Rails ,
模板语言

在两年前就有过一场争论,争论的焦点在于Rails框架及它缺乏内建模板语言的支持,还有是否要为Rails引入这样的模板语言。直至今天,已经存在有不下五种的模板系统:ERB、 HAML、Liquid、Amrita2等等。然而所有这些都是将Ruby语言或是Ruby的派生语言与HTML代码混合在一起。Yurii Rashkovskii最近引入了一种新的模板系统,称为Lilu

Lilu是一种允许保持Rails视图不变,使其内部无须含有ERB标签侵扰的方法(和工具)。

Lilu的目标是让被插入在其中(按照Java中Tapestry的方式)的实际数据与HTML完全分离开,使保存并读取纯HTML代码更加容易。

Lilu保证你得到纯粹的HTML代码,并使你通过编写指令来使用实际数据更新代码。

Yurii Rashkovskii在挪威奥斯陆的Ruby Tuesday会议上进行了一次演讲,给出了如下的Lilu代码示例:

静态XHTML模仿app/views/blog/post.html

<ul id="found_users">
<li id="found_user">
<h1>John Doe</h1>
</li>
</ul>
<h4 id="no_matching_users">No matching users found</h4>

同时也给出对应的Lilu代码app/views/blog/post.lilu

if @users and !@users.empty?
populate('#found_user').for(:each,@users) do |user|
mapping 'h1' => user.name
end
remove('#no_matching_users')
else
remove('#found_users')
end

Rails创始人DHH对一个HTML和代码完全解耦的模板语言系统如何处像布局(layouts)和partils这样带来生产力的复杂技术持怀疑态度。但Lilu也提供对于partials的支持。

在RailsConf07大会上,Bruce William在主题演讲V is for Vexing中给出了Rails模板解决方案的介绍,以及优缺点分析。Lilu项目也应该被加入到列表之中。优点是Lilu将程序代码与HTML文档清晰的划分开来,允许通过HTML方便的与设计人员进行维护和协作。缺点有:1)与ERb相比性能稍逊,2)项目还处于早期状态,以及3)它不是Rails的标准之一。

两年前,David(即DHH)这样总结到:

对“无编码”模板的追求,让我想起MDA阵营对“无编码”程序这个圣杯的找寻。这是一种海市蜃楼式的幻想,也就是和“把玫瑰换个名字”(译注:原文是“a rose by any other name”,语出莎翁《罗密欧与朱丽叶》第二幕第二场的“A rose by any other name would smell as sweet.”朱生豪先生译为:“姓名本来是没有意义的;我们叫做玫瑰的这一种花,要是换了个名字,他的香味还是同样的芬芳。”)如出一辙的演出。

[...]

所以,如果你打算尝试一下这种方式,请自便。如果真的可能有一个完全非侵入性的(non-intrusive)解决方案出现,我将会认真思考是否要加入这样的特性。

现在有意思了:随着Lilu和Amrita2的到来,DHH这段话是不是还当真呢?

查看英文原文:Rails Mockup Driven Development with Lilu

译者 高昂 是IEEE-CS、CCF会员,博士研究生,关注开源软件发展与进步。

Blood Tie 发表人 Guo Xiaogang 发表于
Re: Blood Tie 发表人 Lai Jason 发表于
  1. 返回顶部

    Blood Tie

    发表人 Guo Xiaogang

    Layout可以用类似SiteMesh Decorators的手法。完全解耦方便做AOP。Lilu看起来像是SiteMesh和Microformat生的娃。

  2. 返回顶部

    Re: Blood Tie

    发表人 Lai Jason

    实际上 Lilu 更像 Tapestry:用对应的 HTML mock-up 作为模板,并在模板中进行更新点标记,然后在运行期用相应值更新模板中的更新点。

    我还没看它的源码,不过看样子像是把 HTML 模板解析成类似于 DOM 数的一个东西,然后进行更新。这样性能自然不佳,不过美工的生活就会更美好些了,直接可以用可视化设计器设计出带有演示数据的 mockup,无须另外做修改就可以用做模板。

深度内容

专访Jeffery Richter:Windows 8是微软的重中之重

Jeffery Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffery Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。

解析JDK 7的动态类型语言支持

随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8可以顺利实现Lambda表达式做技术准备。在这篇文章中,我们将去了解JDK 7这项新特性的出现前因后果和它的意义。