[  原文地址:]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的研究精神。