InfoQ

新闻

Lilu:Rails Mockup驱动开发之道

作者 Sebastien Auvray 译者 高昂 发布于 2007年7月9日 上午12时0分

社区
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

Blood Tie 发表人 Xiaogang Guo 发表于 2007年7月9日 上午11时33分
Re: Blood Tie 发表人 Jason Lai 发表于 2007年7月10日 上午1时12分
  1. 返回顶部

    Blood Tie

    2007年7月9日 上午11时33分 发表人 Xiaogang Guo

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

  2. 返回顶部

    Re: Blood Tie

    2007年7月10日 上午1时12分 发表人 Jason Lai

    实际上 Lilu 更像 Tapestry:用对应的 HTML mock-up 作为模板,并在模板中进行更新点标记,然后在运行期用相应值更新模板中的更新点。 我还没看它的源码,不过看样子像是把 HTML 模板解析成类似于 DOM 数的一个东西,然后进行更新。这样性能自然不佳,不过美工的生活就会更美好些了,直接可以用可视化设计器设计出带有演示数据的 mockup,无须另外做修改就可以用做模板。

深度内容

和Google互补的搜索引擎Wolfram|Alpha

Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。

SOA契约成熟度模型

本文说明了所推荐的契约版本管理设计策略是如何与SOA成熟度模型发生联系的。文章目的是为实现版本管理和可组合性提供一个路线图。

数据服务简介

Vijay Narayanan在这篇文章中对数据服务的几个方面进行了介绍,它们都是SOA实践者和数据架构师感兴趣的内容。本文对数据服务的几个方面进行了介绍,包括需求定义,基本原理和好处、范围、开发以及消费模式。

分块云计算

在本文中,Jimmy Nilsson描述了一种他在过去数年间观察到的一种正在缓慢成长的架构风格,他把这种风格称为“分块云计算”。

豆瓣网技术架构变迁

罗马不是一天建成的,豆瓣的技术架构也是随着用户规模的增长一直在持续变化中。在本次演讲中,豆瓣的首席架构师洪强宁将与大家一起分享从上线时的单台服务器架构开始一直到现在的豆瓣架构变迁历程。

融合思想:深入探索S#arp架构

Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。

王雷谈开源以及新兴市场计划

中国作为新兴市场中的新兴市场,是Sun在美国之外实施SSE(SUN Startup Essentials)项目重点关注的地区。在QCon Beijing 2009期间,InfoQ中文站有幸对此项目的负责人王雷先生进行了采访,探讨了关于开源、新兴市场、SSE等话题。

使用HTML5构建下一代的Web Form

HTML5 是由 WHATWG发起的,最开始的名称叫做Web Application 1.0,而后这个标准吸纳了Web Forms 2.0的标准,并一同被W3C组织所采用,合并成为下一代的HTML5标准。