WEB开发网
开发学院软件开发C语言 实用模式:内部域特定语言 阅读

实用模式:内部域特定语言

 2010-09-30 22:42:30 来源:WEB开发网   
核心提示: 我需要构建运行时行为以及尽可能清晰地表达 DSL 用户意图的 DSL,根据我的经验,实用模式:内部域特定语言(4),非常有必要将运行时行为划分为“语义模型”,该模型由 Martin Fowler 定义为“由 DSL 填充的域模型”(martinfo

我需要构建运行时行为以及尽可能清晰地表达 DSL 用户意图的 DSL。根据我的经验,非常有必要将运行时行为划分为“语义模型”,该模型由 Martin Fowler 定义为“由 DSL 填充的域模型”(martinfowler.com/dslwip/SemanticModel.html)。

上一个代码段的主要特点是它不执行任何实际操作。这一小段 DSL 代码只负责配置 IoC 容器的语义模型。您可以略过上述 fluent 界面,自行构建语义模型对象,如下所示:

var graph = new PluginGraph(); 
PluginFamily family = graph.FindFamily(typeof(ISendEmailService)); 
 
family.SetScopeTo(new HttpContextLifecycle()); 
Instance defaultInstance = new SmartInstance<SendEmailService>(); 
family.AddInstance(defaultInstance); 
family.DefaultInstanceKey = defaultInstance.Name; 
 
var container = new Container(graph);

在运行时行为中,注册表 DSL 代码和正上方的代码完全相同。DSL 只是创建 PluginGraph、PluginFamily、Instance 和 HttpContextLifecycle 对象的对象图表。因此,问题也就出现了,为什么还要费事地使用两个单独的模型? 

首先,作为一名用户,我的确需要上述两个代码示例的 DSL 版本,因为仅需要编写很少的代码就能够更加清晰地表达我的意图,并且不需要非常了解 StructureMap 的内部信息。作为 StructureMap 的实施者,我需要一种简单的方式来构建并测试小型单元中的功能,而使用 fluent 界面本身来完成此任务则比较困难。

使用语义模型这种方法,我能够非常轻松地构建行为类并对其进行单元测试。DSL 代码本身非常简单,因为它的唯一用途就是配置语义模型。

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:实用 模式 内部

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接