实用模式:内部域特定语言
2010-09-30 22:42:30 来源:WEB开发网在许多 Fluent 界面中,重要因素之一是试图指导 API 用户以特定顺序执行操作。在图 2 所示的情况下,我严格使用 BindingExpression 上的接口控制用户在 IntelliSense 中的选择,即使在整个过程中始终返回同一个 BindingExpression 对象。思考一下这个问题。Fluent 界面的用户只应该一次性指定操作名称和键盘快捷方式键。此后,用户不必在 IntelliSense 中查看这些方法。DSL 表达式首先调用 ScreenObjectRegistry.Action(name),此操作会捕获将在菜单中显示的快捷方式的描述性名称并返回新的 BindingExpression 对象作为此接口:
public interface IActionExpression
{
IBindingExpression Bind(Key key);
IBindingExpression Bind(ModifierKeys modifiers, Key key);
}
将 BindingExpression 转换为 IactionExpression 后,用户只能指定快捷方式的键组合,这将返回同一个 BindingExpression 对象,但如果转换为 IbindingExpression 接口,用户只能指定单个操作:
// The last step that captures the actual
// "action" of the ScreenAction
public interface IBindingExpression
{
ScreenAction ToDialog<T>();
ScreenAction ToScreen<T>() where T : IScreen;
ScreenAction PublishEvent<T>() where T : new();
ScreenAction To(Action action);
ScreenAction To(ICommand command);
}
对象初始值
现在我们已经引入了方法链接作为在 C# 中进行内部 DSL 开发的主要方式,接下来就看看通常可简化 DSL 开发人员工作机制的其他可选模式。第一种可选模式是只使用 Microsoft .NET Framework 3.5 中引入的对象初始值功能。
更多精彩
赞助商链接