私は基本的に責任の連鎖パターンのバリエーションであるタスクのパイプラインを持っています。
パイプラインのタスクは次のようになります
internal interface IPTask<T>
{
bool CanExecute(T instance);
T Process(T instance);
}
..そして私のプロセッサは次のようになります
internal interface IProcessor<T>
{
T Execute(T instance);
}
私の具体的な実装は次のようになります。
public class Processor<T> : IProcessor<T>
{
private readonly ITasks<T> tasks;
public Processor(ITasks<T> tasks)
{
this.tasks= tasks;
}
public T Execute(T instance)
{
var taskstoExecute = tasks.GetTasks()
.Where(task => task.CanExecute(instance));
taskstoExecute.ToList().ForEach(task=>task.Process(instance));
return T;
}
}
..そして私のタスクは次のようになります:
internal interface ITasks<T>
{
IEnumerable<IPTask<T>> GetTasks();
}
Tは異なるインスタンスである可能性がありますが、一般的なコントラクトに拘束されます。タスクの1つは、着信オブジェクトを完全に異なるオブジェクトにマッピングし、そこからそのインスタンスを転送することです。
ご覧のとおり、パイプラインですべてのタスクを実行しています。これを次のように変更します。
- 次のタスクのメソッドの入力は
Execute
、以前に実行されたタスクからのものである必要があります。 - タスクが失敗した場合
CanExecute
、パイプラインはタスクの処理を停止する必要があります。
これを手に入れるのを手伝ってくれませんか。また、この目的のためにコードが異なる構造になることを期待しますか?