• [阅读随想] 动态语言 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中,列出了几种典型的“仪式”:

    • 工厂模式(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 原则为目标。

  • 相关阅读:
    LintCode "Maximum Gap"
    LintCode "Wood Cut"
    LintCode "Expression Evaluation"
    LintCode "Find Peak Element II"
    LintCode "Remove Node in Binary Search Tree"
    LintCode "Delete Digits"
    LintCode "Binary Representation"
    LeetCode "Game of Life"
    LintCode "Coins in a Line"
    LintCode "Word Break"
  • 原文地址:https://www.cnblogs.com/RChen/p/1163101.html
Copyright © 2020-2023  润新知