[阅读随想] 动态语言 DSL 和 Xml 配置 / 仪式和本质
1. http://haacked.com/archive/2008/04/18/dynamic-language-dsl-vs-xml-configuration.aspx
2. http://blog.thinkrelevance.com/2008/4/1/ending-legacy-code-in-our-lifetime
现在我们的编程手法已经越来越复杂化,随着设计模式的普及,各种 Pattern,Dependency Injection 框架的应用越来越多,以至于我们可能会在开发一个简单的任务之前,就会考虑很多和任务本身不相干的问题。比如,创建对象是该用 new 呢,还是工厂模式,还是依赖注入?
这就是仪式(Ceremony)多于本质(Essence)的典型体现。这种做法和敏捷方法背道而驰。
在引文2中,列出了几种典型的“仪式”:
2. http://blog.thinkrelevance.com/2008/4/1/ending-legacy-code-in-our-lifetime
现在我们的编程手法已经越来越复杂化,随着设计模式的普及,各种 Pattern,Dependency Injection 框架的应用越来越多,以至于我们可能会在开发一个简单的任务之前,就会考虑很多和任务本身不相干的问题。比如,创建对象是该用 new 呢,还是工厂模式,还是依赖注入?
这就是仪式(Ceremony)多于本质(Essence)的典型体现。这种做法和敏捷方法背道而驰。
在引文2中,列出了几种典型的“仪式”:
- 工厂模式(Java)
- 依赖注入 (Java)
- getters 和 setters (Java)
- annotations (Java)
- 冗长的异常处理 (Java)
- 类变量的特殊语法 (Ruby)
- 实例变量的特殊语法 (Ruby)
- 语句块第一个参数的特殊语法 (Ruby)
而在配置这个问题上,Rails 中很多配置用 yaml 配合 DSL 来写,比较直观灵活。而 Java/.NET 则传统的用 Xml 配置文件。
比如 .Net 中如果要在 config 文件中写一段自定义配置,需要做很多额外的工作。比如在 <configSections> 里面申明自定义节,实现自定义的 IConfigurationSectionHandler 类来解析节内容等,相当麻烦。
当然这么说并不是完全否定 Xml 配置。Xml 提供了完善的语义,在很多场合非常有用。比如用 Xaml 的方式来写 WPF 程序,就比写代码要省力的多。
如果在开发过程中,能遵循 TDD 的办法,则有可能在仪式和本质之间取得较好的平衡。显然,越能直接的解决本质问题,越少铺垫的框架,模式,我们的生活越轻松。
真的遇到需要模式的地方,我再 "Refactoring to Patterns" 也不算晚。总之,一切以满足 DRY 原则为目标。