生产力工具,生成非流利类的流利等价物

本文关键字:等价物 工具 生产力 | 更新日期: 2023-09-27 18:00:23

fluent接口的一个基本特征是,通常被声明为void的方法将返回一些可用的东西,通常是它们所属类的实例(即this)。StringBuilder举例说明了这种约定,虽然它本身并不完全流利,但它确实为您提供了链式方法调用的便利:

sb.Append("Foo")
  .Append("Bar")
  .AppendLine();

然而,System.Web.Mvc.TagBuilder并不遵循这一惯例;方法均为CCD_ 4。

清理这一问题的一种快速而肮脏的方法可以是将私有TagBuilder(_instance)封装在FluentTagBuilder类中,然后实现所有相同的方法,但将工作委托给实例并返回this而不是void

实现这一目标的最佳方式是什么?继承显然不行,因为方法只会因返回类型而异。如果可能的话,我宁愿保持简单,不涉及mock/substitution框架。感谢你能分享的智慧!

生产力工具,生成非流利类的流利等价物

您可以创建一个扩展方法来传播构建器对象:

public static T Do<T>(this T obj, Action<T> action)
{
    action(obj);
    return obj;
}
TagBuilder builder;
builder.Do(b => b.SetInnerText("text"))
       .Do(b => b.AddCssClass("class"))
       .Do(b => b.GenerateId("id"));

我刚刚创建了一个小的Git存储库,并启动了一个工具。

它是非常业余的,是糟糕的编码,有很多问题是的,但你它非常简单,你可以适应它

Fluentizer获取一个类,并通过反射生成一个新的类,封装原始方法。

请在此处查看Fluentizer。