Ivan Porto Carrero谈IronNails

一个为有Ruby on Rails开发经验的人设计的、使用IronRuby构建应用程序的新项目诞生了。这个项目被被称为IronNails,已经为向开发者发布做好了准备。

IronNails是Ivan Porto Carrero(开发者、作家和Ruby爱好者)开发。Ivan向其它开发者开放了代码以便于使用及进一步的开发。他将IronNails描述为“与Rails类似得面向IronRuby和WPF/Silverlight开发工具”。InfoQ采访了Ivan,和他聊了聊IronNails。

我们向Ivan问到,IronNails是什么:

IronNails应该成为一个IronRuby专属的gem包,它将Rails的开发风格带进WPF和 Silverlight中。这意味着它应该有生成器、类似的启动命令行脚本、一个插件框架等。同时我希望它能利用现有工具(如Blend和 Ilustrator)在布局上的优点。Blend是一个为设计师开发的用来设计图形界面及互动的工具。这就是说可以只使用XAML文件或者甚至是 XAML DSL以创建视图。

通过定义一系列行为,设计者可以像在Blend里一样拖放各种行为。行为包括左键单击、悬浮(进入/离开)等。开发者接下来可以将欣慰连接到一个具名的命令,这个命令连接到一个控制器动作。这在WPF可以通过附加属性(依赖对象)实现。其中将有很多工作要做。

这个项目很有意思,它需要运行在IronRuby下,但IronRuby还没发布,我们想知道为什么这个框架被提前创建:

现在我正在为Manning写IronRuby in Action这本书,在探索结合使用IronRuby和WPF的可能性时它出现了,它看起来是个不错的主意。

我体验过界面构建器和Mac上的ruby cocoa,喜欢Rucola项目的呈现方式。Rucola的目标和IronNails是一样的,只是它是基于cocoa的。cocoa对于视图的理解与 Microsoft是不同的,这就是为什么IronNails使用的一些概念也不同。Eloy是给我指了这条道路的人,也许他会读到这篇文章。它应该做的是让你能够使用e-editor/Textmate或其它你所喜欢的编辑器进行有效地开发。它应该和Test::Unit及RSpec很好地集成,以解决Rails框架为web开发所解决的同样的问题。

我喜欢使用MVC模式进行web开发,并且我发现它非常适合我大多数的项目,所以我希望将同样的方式带入WPF和Silverlight开发中。

对于一些新的工具或框架,创建者对于其的定义往往与社区对其得观感完全不同,你如何定义IronNails的目标用途:

但你看到它是适合的:) 但是我认为它应该使你能使用手中最好的工具进行设计和排版,恕我直言,你最好不要使用一种视觉元素的工具进行这些工作。若手边的工作是编码,则一个编辑器或者一个更重量级的IDE就足够了。最后,你应该使用IronNails < >, 它将为你建立一个应用程序的骨架。之后你可以使用命令行工具生成控制器、模型和视图。一个新建立的视图将被添加到csproj文件中,这时候设计器就可以 往里添加内容了。正如我提到的,设计器可以为任何元素定义行为,开发者可以重定它们到具名的动作。设计者可以使用他们选择的工具建立故事板等。

框架有一些预定义的文件夹用来查找主题(Skin)。主题包括应用程序的模板。视图包含数据绑定控件和一般布局,但是这里分离内容到模板并存放到主题文件中(资源目录)。这样内容和布局很好地分离,你可以很轻松地创建新主题或者完全不同地呈现数据。

IronNails为IronRuby和WPF/Silverlight增加了新功能,关于新增价值的类型:

它实现了模型-视图模型-视图-控制器这个看起来在WPF中很流行的模式。它是基于一些解耦代码和XML的最佳实践的概念建立的。在绝大多数情况下你不需要在后台代码中做任何事情,因为视图模型负责提供命令并连接视图和控制器。

它提供Rails开发者熟悉的经验以实现这些。它使用元编程来生成视图模型,使你能够绑定至你在控制器中定义的对象。你可以定义你自己的视图模型以添加行 为,但你并不需要。需要遵守一些命名约定,然后它就能工作了。它使开发更加的可测试,并且紧密地与流行的Ruby测试框架绑定。

Microsoft宣布IronRuby将在2009年第一季度发布,还有如此多得工作需要完成的情况下,IronNails需要等待它的完成。Ivan对于IronNails的未来的想法:

目前我不能完全按我的预想中实现IronNails,因为IronRuby缺少一些特性。当越来越多特性在 IronRuby中实现,我们会去除其中更多得C#代码将其转入Ruby代码基础。目前在XAML不能绑定到纯DLR,但是在将来这将变成可能。当前代码 基础中有一些技巧和规避措施,当IronRuby支持这些特性后这些代码也将被替代。

如前面所说它是我为我的IronRuby书而写,但是现在看起来它足够被试用了,所以如果社区有兴趣,这个项目将会持续进步并更上语言和框架的发展。

作为一个开源项目,常常会有外界的开发者帮忙,Iven说他乐于接受帮助:

IronNails寄居在GitHub。他们可以通过GitHub的分叉和推动系统提交补丁以加入这个项目。他们也可以把他们的GitHub用户名通过Email发给我,然后我将他们添加到项目中。还有一个Lighthouse项目可以提交评论。我接受任何形式的帮助,如代码、文档、测试等。

我期望我不会更多地投入到代码中,直到我写完了我的书。我也许每个月只能花两小时在它上面,所以我也期待社区能维护它直到我能投入更多的时间。

更多关于IronNails的信息可以从Ivan的博客中找到,IronNails可以从GitHub下载。

查看英文原文:Talking with Ivan Porto Carrero about IronNails

你可能感兴趣的:(Ivan Porto Carrero谈IronNails)