2012-08-08 46 views
2

我有一個服務調用返回給我一個IEnumerable的CustomObject,這是一個我沒有修改權限的第三方調用。可以假定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. 如果與IDS 1和3這兩個元素在列表中存在,只有使基於規則 一個其中之一。如果其中任何一個IsPrivate被標記爲true,則顯示IsPrivate設置爲false的那個 b。如果IsPrivate都沒有設置爲true,則顯示高點 ...等等

什麼是實現這些規則的最佳位置。我想過如何實現IEqualityComparer並在我的服務調用中執行.Distinct(),看起來不像IEqualityComparer要做什麼。

對此提出建議?

+0

您是否必須使用反射來確定有多少'Id對象具有或存在什麼被遺漏了? – NtscCobalt 2012-08-08 14:56:42

+0

我不明白這個問題。它是一個IEnumerable ,每個對象可以有一個Id。你能否澄清你的q? – 2012-08-08 15:13:28

+0

對不起,我很抱歉,我認爲你的意思是說,在你編輯之前,CustomObject可能具有諸如Id1,Id2之類的屬性。 – NtscCobalt 2012-08-08 15:38:13

回答

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; 
} 
+0

似乎沒有其他優雅的解決方案。謝謝你的時間! – 2012-08-08 17:12:45