实用模式:内部域特定语言
2010-09-30 22:42:30 来源:WEB开发网在过去的几年中,域特定语言 (DSL) 是一个热门主题,并且将来很可能会越来越重要。您可能一直在参与“Oslo”项目(现在称为 SQL Server Modeling)或使用 ANTLR 等工具来构建“外部”DSL。此外,还可以使用一种更直接的替代方法,即使用现有编程语言(如 C#)创建“内部”DSL。
对于非开发人员,可以像英文一样阅读外部 DSL,虽然内部 DSL 可能不是如此明确易读,但创建内部 DSL 的机制更加简单,因为您不需要编译器或分析器来外部解读代码。
请注意,我并不是说本文中的 DSL 适合业务专家查看。在本文中,我只重点讲解内部 DSL 的模式如何通过构建易于读写的 API 使我们的工作像开发人员一样简单。
我从我管理和开发的以 C# 编写的两个开源项目中提取出了大量示例。第一个是 StructureMap,它是面向 Microsoft .NET Framework 的控制反转 (IoC) 容器工具之一。第二个是 StoryTeller,这是一个验收测试工具。您可以使用 Subversion 从 https://structuremap.svn.sourceforge.net/svnroot/structuremap/trunk 或 storyteller.tigris.org/svn/storyteller/trunk(需要注册)下载这两个项目的完整源代码。我还建议将 Fluent NHibernate 项目 (fluentnhibernate.org) 作为另一个示例源。
文本扩展
在本文中,我将声明更重要的一点就是可以采用许多小技巧,使代码读起来更清晰、含义更明确。应用这些小技巧后,代码的声明效果更好且含义更加明确,从而更容易正确编写,真正提高您的编码效果。
我越来越频繁地对基本对象(如字符串和数字)使用扩展方法,以减少核心 .NET Framework API 中的重复并提高可读性。这种扩展值对象的模式称为“文本扩展”。
更多精彩
赞助商链接