C# 处理一批项目,返回要报告状态的对象
我正在寻找以下场景的模式(或良好实践): 我的函数C# 处理一批项目,返回要报告状态的对象,c#,design-patterns,C#,Design Patterns,我正在寻找以下场景的模式(或良好实践): 我的函数List Process(List Data){..}将处理一个数据列表,并返回批次中每个项目的处理位置信息 struct BatchItemResponse { int BatchItemID; bool Processed; string Description; } 有什么想法吗?我的建议是否尽可能好?你可以完全按照你的建议去做——它会很好地工作。但既然你在谈论模式,那么根据你的目标,有两种潜在的优雅的可能性 您可以使用迭代器模式(其细节
List Process(List Data){..}
将处理一个数据列表,并返回批次中每个项目的处理位置信息
struct BatchItemResponse { int BatchItemID; bool Processed; string Description; }
有什么想法吗?我的建议是否尽可能好?你可以完全按照你的建议去做——它会很好地工作。但既然你在谈论模式,那么根据你的目标,有两种潜在的优雅的可能性 您可以使用迭代器模式(其细节被.NET可爱的枚举器巧妙地隐藏起来):
IEnumerable进程(列表数据)
{
foreach(数据中的批处理项)
{
BatchItemResponse结果=新的BatchItemResponse();
result.Processed=ProcessItem(项目);
收益结果;
}
}
或者,您可以通过为感兴趣的观察者触发事件来使用观察者模式:
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 EventHandler<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));
}
}
}
公共类EventArgs:EventArgs
{
公共事件参数(T值)
{
m_值=值;
}
私人T m_值;
公共价值
{
获取{返回m_值;}
}
}
public event eventhandler您提出了解决方案,但没有说明问题。在这里很难看出您的解决方案是否与您的问题相匹配:-)以上没有问题,我只是在寻找最佳解决方案。最佳解决方案用于什么?如果您需要返回ID、说明以及是否为每个批次项目处理了批次项目,那么您已经找到了最佳解决方案:-)
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 EventHandler<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));
}
}
}