返回 登录
0

Lotus:替代Rails的新一代Web框架?

http://img.my.csdn.net/uploads/201406/25/1403661721_5444.png

昨天一个名为Lotus的Ruby Web框架,登上了Hacker News头条区

框架的作者是Luca Guidi,一位住在意大利罗马的资深全栈工程师,目前效力于Litmus公司,此前他作为核心成员的开源项目Redis Store很受欢迎,关注数超过了1000。

http://m.c.lnkd.licdn.com/mpr/mpr/shrink_200_200/p/5/000/1bb/09f/150509d.jpg

Guidi在介绍文章中说,因为对Web框架的现状失望(此前他曾经多次批评Rails),他秘密地利用业余时间开发自己的框架,从零开始,不做任何假设,经过多次写了又推翻、丢弃的过程,不断减去非必要的东西,最终得到了一个“优雅与性能兼得、方便与设计坚实俱备”的Web框架。各种权衡取舍都考虑了真实开发场景中的痛点。

到了2014年年初,Guidi公开宣布了Lotus项目,同时发布Lotus::Utils和Lotus::Router两个组件,并承诺以后每月23日放出一个组件。但社区似乎反应并不强烈:Talk is cheap, show me the code。

在那篇发布文章中,Guidi这样描述Lotus的设计理念:

简洁,少用DSL,少用约定,多用对象,不折腾(原文是monkey patch)核心语言和标准库,分离MVC层的各个关注点。建议而不是强迫使用模式,开发者可以自由设计自己的架构,选择继承结构。简化测试,鼓励类之间责任单一、定义明确。

6个月后,框架本身终于出来了。轻量、快速、方便测试,要让面向对象编程再次回到Web开发中。每个库代码都小于500行,可以随意组合。Lotus支持智能复用机制,一个Ruby进程里可以跑多个框架副本。架构上支持微服务。

目前已有的组件包括:

  • Lotus::Router HTTP路由器,支持Rack协议
  • Lotus::Controller 控制层,支持Rack协议
  • Lotus::View 视图层
  • Lotus::Model 模型层,依赖于Sequel
  • Lotus::Utils 核心扩展和类实用工具

项目到现在GitHub上关注数已经达到680个。

Hacker News上,Rails项目的contributor Ernie Miller(emiller829)评价:

这是一个很有前途的开始。一段时间以来我也觉得,对于感觉Rails和Ruby两种方式不太相得的同学,在Rails之外需要一些比较好的替代品。不过从例子来看,DSL的味道好像也很重啊……只要足够简单,这将有机会成为Ruby生态系统中的重要部分。

另一些同学将Lotus与SinatraRamezeLean做了比较和讨论。也有人说,这让人想起了与Rails合并之前的Merb。还有人提到Padrino(基于Sinatra的一个框架)。

一个很热烈的讨论是jaredcwhite挑起来的,他说:为啥不直接用JavaScript统一前后端,共享一套面向对象代码呢?反正有Opal嘛(Ruby-JavaScript源码转换器)。事实上,已经有基于Opal的框架了,叫Vienna

有一个讨论聚合了几个Lotus案例程序,可以参考:

Ruby China社区里,billy这样评论:

暂时发现几个特点:

  1. 颠覆Rails命名系统,直接使用Ruby namespace来管理。我觉得这个好,又简单又灵活。
  2. model设计意见性很强,强制隐藏所有通用query比如where, limit, oder等等。强迫开发者自己写有意义的API。这个好。

不明白的地方:没有migration,只有create table。那要更改数据库结构怎么办?

2005年12月,Rails横空出世,通过引入约定大于配置等特性,改变了Web开发的面貌,各语言后来都陆续山寨了各自的Rails。今天,它也变得越来越重,问题不少。比如,Rails的控制层很难测试,ActiveRecord模型过于臃肿等等。

Lotus代表正确的方向吗?它有望成为新一代框架的代表吗?还是像某些人评论的,一切已经太晚,框架时代已经过去,微服务和SOA才是未来?

欢迎评论。

评论