質問

私は今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