Moq,Ninject,流利的NHibernate风格的图书馆?

时间:2010-11-27 18:27:22

标签: c# moq

这是一个头脑风暴的问题。任何意见将不胜感激。

最近我观察到一些源框架的模式彼此相似。

Moq

mock.Setup(framework => framework.DownloadExists("2.0.0.0"))
    .Returns(true)
    .AtMostOnce();

Ninject

Bind<IService>().To<RedImpl>().WhenMemberHas<RedAttribute>();

Fluent NHibernate

   HasManyToMany(x => x.Products)
     .Cascade.All()
     .Table("StoreProduct");

我注意到它们都与某种配置有关。与普通的属性设置配置相比,使用起来更方便。

我可以说我喜欢这种风格,但无法弄明白为什么。

有谁能告诉我它有什么优势以及这种风格何时有用?还有,这样的风格有名字吗?这是如何在引擎盖下实施的?如果有关于如何编写Moq样式的教程,那将非常感激。

更新

感谢所有帮助。既然我知道这种风格叫做 Fluent Interface ,那么有没有关于如何创建示例Fluent界面的教程?

3 个答案:

答案 0 :(得分:4)

该模式称为Fluent Interface,在http://www.martinfowler.com/bliki/FluentInterface.html

中有更详细的描述

通常最好在任务的完全域特定语言过度使用时使用。基本上,在您编写的每个方法中返回您正在操作的对象,并尝试使方法名称与意图密切匹配。

虽然未必连接,但您可能希望将Builder模式与构建复杂对象的替代方法进行比较,因为一些激励方案是相似的。

答案 1 :(得分:2)

它被称为Fluent interface

这种风格的主要优点是您可以轻松读取和编写用于构建复杂对象的代码。

答案 2 :(得分:2)

它们是fluent interfaces,通常用于为某些任务(例如配置)创建小型DSL。它们优于文本,因为它们可以由编译器进行类型检查。

例如,可以使用xml配置许多IoC容器 - 这具有一些优点,例如易于部署配置修改,但在某些重构(例如类型重命名)的情况下会很脆弱。