实用模式:内部域特定语言
2010-09-30 22:42:30 来源:WEB开发网核心提示: 随着时间的推移,区分 DSL 表达式和语义模型会变得非常有用,实用模式:内部域特定语言(5),您将不得不频繁使用 DSL 语法进行某种程度的迭代,以便根据使用情况的反馈获得可读性和可写性更高的表达式,最简单同时可能也是最常用的技巧就是,使对象只从方法调用返回(这大部分也是 jQuery 的工作原
随着时间的推移,区分 DSL 表达式和语义模型会变得非常有用。您将不得不频繁使用 DSL 语法进行某种程度的迭代,以便根据使用情况的反馈获得可读性和可写性更高的表达式。如果在更改语法时不必过多担心会破坏运行时功能,则该迭代会更加顺利。
另一方面,在将 DSL 作为 StructureMap 的正式 API 后,有时我能够在不破坏 DSL 语法的情况下扩展或重新组织内部语义模型。这只是在软件设计中使用“关注点分离”原理具有的优势的另一个示例。
Fluent 界面和表达式生成器
Fluent 界面是 API 的一种样式,它使用方法链接创建简洁、易读的语法。就此问题最有名的例子,我认为可能是日益普遍的面向 JavaScript 开发的 jQuery 库。jQuery 用户可以迅速识别代码,如以下代码:
var link = $(‘<a></a>’).attr("href", "#").appendTo(binDomElement);
$(‘<span></span>’).html(binName).appendTo(link);
通过 Fluent 界面,可将代码“密化”到小型的文本窗口中,提高代码的可读性。此外,它还经常帮助我指导 API 用户作出正确的选择。制作 Fluent 界面时,最简单同时可能也是最常用的技巧就是,使对象只从方法调用返回(这大部分也是 jQuery 的工作原理)。
我将在 StoryTeller 中用于生成 HTML 的简单类命名为“HtmlTag”。我可以使用以下方法链接快速构建 HtmlTag 对象:
var tag = new HtmlTag("div").Text("my text").AddClass("collapsible");
更多精彩
赞助商链接