我与NHibernate和我的域模型现在难倒。我想象在我的头上一个很好的API,但我有一个很艰难的时期它变成现实。这里是什么,我试图完成一个例子:

Trip trip = new Trip("Austria2009");

foreach(User user in trip.People.Crew.IsApproved())
{
    reponse.write(user.Firstname);
}

// Or I could hack some of the stuff off above and make it look like this
foreach(User user in trip.People.Crew)
{
    reponse.write(user.Firstname);
}

// Or yet again pull all the people back and forget a specific role
foreach(User user in trip.People)
{
    reponse.write(user.Firstname);
}

那么,这东西在foreach循环中作出的任何有意义的舔? :P我觉得我试图建立某种与我的课流畅的界面。我使用NHibernate的持久性等是这样的可能还是我只是需要把事情简单了很多?

有帮助吗?

解决方案

假设旅行是一个IQueryable,一个连贯接口可以相当容易地与LINQ查询和扩展方法被写入。注:以下假设的代码没有进行测试。

public static class MyExtensions
{
    public static IQueryable<Person> People(this IQueryable<Person> source)
    {
        return from person in source
               select person;
    }

    public static IQueryable<Person> Crew(this IQueryable<Person>  source)
    {
        return from person in source
               where person.type == crewMember
               select person;
    }
    public static IQueryable<Person> IsApproved(this IQueryable<Person>  source)
    {
        return from person in source
               where person.IsApproved == true
               select person;
    }
}

...等。注意在每个方法的参数列表中使用了“这个”关键字。这允许该方法通过打点任何IQueryable的源被调用,如:

var crew = myPersons.Crew();
var approvedCrew = myPersons.Crew().IsApproved();

请注意:我不相信这是消除使用这种技术的括号的方式。要做到这一点,你需要使用属性,和C#不支持“扩展属性”,只有“扩展方法。”

这里

更多信息: http://en.wikipedia.org/wiki/Fluent_interface

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top