2010-06-02 75 views
2

我正在尋找一個模式(或好做法)對以下情形報告:處理一批項目,返回一個對象上狀態

我的功能List<BatchItemResponse> Process(List<BatchItem> Data) {..}將處理數據的列表,並返回信息可以處理批次中的每個項目的位置。

struct BatchItemResponse { int BatchItemID; bool Processed; string Description; } 

有什麼想法?我所提出的就像它得到的那樣好?

+1

您提出了一個解決方案,但沒有說明問題。如果您的解決方案符合您的問題,則有點難以確定:-) – dtb 2010-06-02 15:05:16

+0

上述問題沒有問題,我只是在尋找最佳解決方案。 – 2010-06-02 15:38:47

+1

最好的解決方案是什麼?如果您需要返回ID,說明以及是否爲每個批次項目處理了批次項目,那麼您已經找到了最佳解決方案:-) – dtb 2010-06-02 15:40:50

回答

2

你可以完全按照你的建議 - 它會工作得很好。但是既然你正在談論模式,根據你的目標是什麼,有一些潛在的高雅可能性。

你可以使用迭代器模式(其中的細節都整齊地隱藏起來,通過.NET的可愛統計員):

IEnumerable<BatchItemResponse> Process(List<BatchItem> Data) 
{ 
    foreach (BatchItem item in Data) 
    { 
     BatchItemResponse result = new BatchItemResponse(); 
     result.Processed = ProcessItem(item); 
     yield return result; 
    } 
} 

或者你可以通過射擊有興趣的觀察員訂閱事件使用Observer模式:

public class EventArgs<T> : EventArgs 
{ 
    public EventArgs(T value) 
    { 
     m_value = value; 
    } 

    private T m_value; 

    public T Value 
    { 
     get { return m_value; } 
    } 
} 

public event EventArgs<BatchItemResponse> ItemProcessed; 

public void Process(List<BatchItem> Data) 
{ 
    foreach (BatchItem item in Data) 
    { 
     BatchItemResponse result = new BatchItemResponse(); 
     result.Processed = ProcessItem(item); 
     if (ItemProcessed != null) 
     { 
      ItemProcessed(this, new EventArgs<BatchItemResponse>(result)); 
     } 
    } 
} 

什麼好的這兩種模式是,使用得當,它們將讓你更新的實時狀態,而不是等待BatchItems的整個列表進行處理。