現在書いている C# の一部では、同じシグネチャを持つ複数のメソッドを同じ方法で処理する必要があります。また、将来的にはこれらの方法がさらに増える可能性があります。同じ種類のロジックを何度も繰り返す代わりに、次のことを考えました。
private delegate bool cleanStep(BuildData bd, out String strFailure);
List<cleanStep> steps = new List<cleanStep>();
steps.Add(WriteReadme);
steps.Add(DeleteFiles);
steps.Add(TFSHelper.DeleteLabel);
steps.Add(TFSHelper.DeleteBuild);
List<cleanStep>.Enumerator enumerator = steps.GetEnumerator();
bool result = true;
while (result && enumerator.MoveNext())
{
result = enumerator.Current.Invoke(build, out strFailure);
if (!result)
{
logger.Write(LogTypes.Error, strFailure);
}
}
これにはいくつかの優れた機能があると思いますが、少し設計しすぎて難読化されているようにも感じます。
これを行うためのより良い方法に感謝できますか?
ところで:
- トランザクションである必要はありません。
- strFailure は例外を非表示にせず、必要に応じて完全にラップします
ありがとう。