RSS 2.0 Feed

Sunday, April 20, 2008

[  原文地址:]Dynamic Language DSL vs Xml Configuration

申明:仅代表个人观点,非其他人的,非官方的。我不应该说这些,但是历史告诉我,我应该说。P.S.我并不是一个DSLs和动态语言的专家;)

这个星期,我参加了一个John Lam关于IronRuby的访谈,他亮出了Uncle Ben的名句“能力越大,责任越大”。当然,他指的是动态语言像Ruby的力量。

我被他另外一句话吸引了。他说如果他阅读使用metaprogramming技术写的ruby 代码几小时,他的脑袋会乱成一团。要理解在meta以及meta-meta层次上写的代码来运行时操纵并重写代码,需要花费很大的精力。也许这就是为什么c#将在近期继续是主要语言,而我尽力让我的大脑在更高层次运作。;)

然而,我认为他指的代码类型是用于实行DSL自身的代码。一旦写了一个DSL,位于那个DSL代码在它之上的代码必须是可读的。在它成为主要语言之前,我已经开始使用IronRuby。我能够看到我自己时不时的创建并使用mini-DSLs作为配置的替代品。

AHhh...配置。有时候我觉的这是一个误称。至少在java和.net社区中将配置运用与实践上时是的。从我们将什么东西都塞进xml配置时就有了这种趋势。

所以人们经常要求我们向那些我认为应该与单元测试一起被设置在代码中的配置特性提供XML。我们已经把XML变成一个程序语言,而且是一个蹩脚的。Ayende 谈论一个issue,在一个工具下清除大量的XML配置。这不是一个棘手的问题,但它吐出了一个事实,XML是代码,但这个代码的外在胜于内涵。要理解我说的外表和内涵强看 Ending Legacy Code In Our Lifetime.

用asp.net mvc 项目时,我们使用了代码第一,配置第二的方法。你可以从我们的URL Routing中看到这一点。你在代码中第一路径,而我们也许在将来的版本中提供配置的方法。

用这个方法,你可以为你的路径定义写单位测试,这是一件好事!Routes将URL转变成一个方法的形式,你为什么不想为它写测试呢?

我写这个文章的原因是,最近我一直在用IronRuby,想写一些在自己的时间里做的一些有趣的事情。这个帖子告诉了大家我为什么要研究IronRuby,除了它很有趣,以及贯穿Hack的研究精神。

posted @ | Feedback (0) |

[  原文地址:]ASP.NET MVC Preview of a Preview

更新:只是为了证明这是一个预览版的预览版,我们在预建VSI的下载时出现了一个签名问题。你如果试着从源代码开始构建,将会碰上问题。为此我们致以歉意,即是它是一个比较粗糙的预览版,我们确实想把它做好,这样你们就可以用这些代码了。所以你遇到了那个问题,请务必重新下载VSI.

大家都知道,微软对命名非RTM(Release to Manufacturing)版本更为拿手。我们有例如CTP,Preview,Alpha,Beta,RC(Release Candidate)等等的术语。另一方面,微软至少已经尽力向RTM发展,而不是一直将产品保持在Beta测试期中。

用asp.net mvc,我们需要添加另外一个版本的类型。现在我一直把它叫做CodePlex Source Release,意味着单纯的分享在进程中的源代码。有一天,ScottGu在我的办公室里把他叫做“预览版的预览版(Preview of a Preview)”,这个名字把我吸引住了。这确实是一个即将来临的预览版的预览版。;)

说起ScottGu,他在他的博客里填了一篇这一版本的具体描述,我推荐大家看一下,因为他细致的描述了大部分的修改。

对这个最近发行的代码,我尤其高兴的一点 我们发行了单元测试。正如Scott提到的,我们使用MoQ作为我们测试的模拟框架。请注意这不是一个官方确定的特定的模拟框架。起初我们想把测试放到Rhino Mocks(我曾经写了很多关于他们的文章)中。MoQ正好有一个与我们内部使用的模拟框架相似的程序模式,所以我们转向了MoQ。

之后,我会再写一些关于这个版本的文章。但是现在,我将留给一个 更新 Northwind的demo,它是以这个版本为基础的。

posted @ | Feedback (0) |