2

CustomObjectのIEnumerableを返すサービス呼び出しがあります。これは、変更する自由がないサードパーティの呼び出しです。CustomObjectは、次のような定義を持つと見なすことができます。

public class CustomObject
{
    public int Id { get; set; }
    public string Name { get; set; }

    ...
    ...
    ...

    public int Points { get; set; }
    public bool IsPrivate { get; set; }
}

返されたオブジェクトのリストの中に、特別なCustomObjectオブジェクトを含めることができます。次のような特別なルールを実装する必要があります。

  1. ID 1と3の両方の要素がリストに存在する場合は、ルールaに基づいてそのうちの1つのみをレンダリングします。それらのいずれかでIsPrivateにtrueのフラグが設定されている場合は、IsPrivateがfalseに設定されているものを表示します。どちらもIsPrivateがtrueに設定されていない場合は、ポイントの高いものを表示します...など。

これらのルールを実装するのに最適な場所はどこですか。IEqualityComparerを実装し、サービス呼び出しで.Distinct()を実行することを考えましたが、IEqualityComparerが意図していることとは異なります。

提案?

4

1 に答える 1

2

クラス'CustomObject'は変更できないため、ビジネスロジックを'render'パイプラインに追加し、適用される特定のビジネスルールがある場合に以下のような関数を呼び出すだけです。次に、レンダリングするオブジェクトのリストからid1とid3を削除し、次の関数から返されたオブジェクトのみをレンダリングします。

CustomObject BizRule3293(IEnumerable<CustomObject> objects)
{
    CustomObject id1 = objects.SingleOrDefault(t => t.Id == 1);
    CustomObject id3 = objects.SingleOrDefault(t => t.Id == 3);
    if (id1 != null && id3 !=null)
    {
        if (!id1.IsPrivate && !id3.IsPrivate)
            return id1.Points > id3.Points ? id1 : id3;

        return id1.IsPrivate ? id3 : id1;
        // No logic stated if both are private
    }

    return id1 ?? id3;
}
于 2012-08-08T15:52:03.800 に答える