流畅编程-空方法

本文关键字:方法 编程 | 更新日期: 2023-09-27 18:07:31

我目前正在使用流畅的API进行构建的MVC控件。我暂时没有问题。

但是我的fluent API中的每个方法都需要一个参数。根据该参数,设置一个属性。

例如:

var grid = GridFor<Model>(items).WithName("MyName").WithRowHeader("true");

但是现在我想知道当你有不接受参数的方法时,流畅的API是如何工作的。

例如:

var result = Model.Validate(x => x.Age).When().It().Is().Any().Number();

更详细地说,我正在努力采用这样的方法:

string s = "Hello";
s.Validate().It().Is().String();
s.Validate().It().Is().No().String();

我在String方法如何知道它是否应该验证给定对象以查看它是否是字符串方面遇到了困难。我想我需要将整个链传递给它,并基于链执行我的逻辑?

有没有人能给我一些指导,告诉我这样的事情应该如何完成?

流畅编程-空方法

它的工作原理是这样的:

public static class ValidationExtensions
{
    public static Validation<T> Validate<T>(this T source)
    {
        return new Validation<T>(source);
    }
}
public class Validation<T>
{
    private readonly T valueToValidate;
    public Validation(T value)
    {
        valueToValidate = value;
    }
    public void Is<T>(T value)
    {
        if (!Object.Equals(valueToValidate, value))
            throw new Exception();
    }
    public NegativeValidation<T> Not()
    {
        return NegativeValidation(value);
    }
}
public class NegativeValidation<T>
{
    private readonly T valueToValidate;
    public NegativeValidation(T value)
    {
        valueToValidate = value;
    }
    public void Is<T>(T value)
    {
        if (Object.Equals(valueToValidate, value))
            throw new Exception();
    }
    public NegativeValidation<T> Not()
    {
        return Validation(value);
    }
}
string s = "Hello World";
s.Validate().Is("Hello World");
s.Validate().Not().Is("Hello World"); // exception
s.Validate().Not().Not().Is("Hello World");