3

为了使我的代码更有条理,我决定使用流畅的接口;然而,通过阅读可用的教程,我发现了很多实现这种流畅性的方法,其中我发现了一个主题,说要创建 FluentInterface我们应该使用Interfaces,但他没有提供任何好的细节来实现它。

这是我如何实现 Fluent API

代码

public class Person
{
    public string Name { get; private set; }
    public int Age { get; private set; }

    public static Person CreateNew()
    {
        return new Person();
    }

    public Person WithName(string name)
    {
        Name = name;
        return this;
    }

    public Person WithAge(int age)
    {
        Age = age;
        return this;
    }
}

使用代码

Person person = Person.CreateNew().WithName("John").WithAge(21);

但是,我怎样才能让接口以更有效的方式创建 Fluent API?

4

1 回答 1

11

interface如果您想控制调用的顺序,使用 fluent API 实现是很好的。假设在您的示例中,设置名称时您还希望允许设置年龄。并且让我们假设您还需要保存这些更改,但只有在设置了年龄之后。要实现这一点,您需要使用接口并将它们用作返回类型。请参阅示例:

public interface IName
{
    IAge WithName(string name);
}

public interface IAge
{
    IPersist WithAge(int age);
}

public interface IPersist
{
    void Save();
}

public class Person : IName, IAge, IPersist
{
    public string Name { get; private set; }
    public int Age { get; private set; }

    private Person(){}

    public static IName Create()
    {
         return new Person();
    }
    public IAge WithName(string name)
    {
        Name = name;
        return this;
    }

    public IPersist WithAge(int age)
    {
        Age = age;
        return this;
    }

    public void Save()
    {
        // save changes here
    }
}

但是,如果它对您的特定情况有利/需要,仍然遵循这种方法。

于 2013-07-23T03:34:28.450 回答