一个为有 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 下载。
评论