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 渲染其中一个。如果其中任何一个的 IsPrivate 标记为 true,则显示将 IsPrivate 设置为 false b 的那个。如果两者都没有 IsPrivate 设置为 true,则显示具有较高点的那个......等等

实施这些规则的最佳地点是什么?我考虑过实现一个 IEqualityComparer 并在我的服务调用中执行一个 .Distinct() ,这似乎不是 IEqualityComparer 的本意。

建议?

4

1 回答 1

2

由于您无法修改“CustomObject”类,因此我会将业务逻辑添加到“渲染”管道中,并且只需调用一些函数,例如下面您有适用的特定业务规则的地方。然后只需从要渲染的对象列表中删除 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 回答