具有向后导航的流畅界面(方法链接)

时间:2012-08-30 13:45:31

标签: c# extension-methods fluent-interface method-chaining

我需要构建一个使用方法链接的类。我理解方法链的概念。例如:

class Company
{
    private String companyName;
    public setCompanyName(String companyName)
    {
        this.companyName = companyName;
        return this;
    }

    public Person addPerson(String name)
    {
         person = new Person();
         person.setName(name);

         return person;
    }
}

class Person
{
    private String name;
    private String address;
    private bool license

    public Person setName(String name)
    {
        this.name = name;
        return this;
    }

    public Person hasDriverLicense(bool license)
    {
        this.license = license;
        return this;
    }

    public Person setAddress(String address)
    {
        this.address = address;
        return this;
    }
}

//in some other class / method i do:
Company company = new Company()
.setCompanyName("SomeCompany")
.addPerson("Mike")
.setAddress("Street 118");

但我需要更进一步。我需要能够做到这一点:

Company company = new Company()
.setCompanyName("SomeCompany")
.addPerson("Mike")
.setAddress("Street 118");
.addPerson("Jane")
.setAddress("Street 342");
.hasDriverLicense(true)

因此,您可以看到我需要能够继续链接。方法addAddress并不总是链中的最后一个方法。它可以是Person类的任何方法。

有没有一种很好的方法来实现这个功能?也许有方法扩展或什么?

非常感谢任何帮助/示例。

1 个答案:

答案 0 :(得分:3)

可以做到这一点。哪个并不意味着你

人员和公司的方法应该只返回一个在上下文中汇总人员和公司的对象。如果你有一个IPerson接口和ICompany接口,这个类型将同时实现两者,在内部保持对两者的引用,并将适当地分派调用。 (调用IPerson方法将被委托给内部IPerson。)

话虽如此,我强烈反对你不要走这条道路。它令人困惑,很难调试并违反基本的OO原则(例如接口隔离)。