У меня есть конвейер задач, который в основном представляет собой вариант схемы цепочки ответственности.
Задача в моем конвейере выглядит так:
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 могут быть разными экземплярами, но связанными общим контрактом. Одна из задач заключается в отображении входящего объекта в совершенно другой объект и пересылке этого экземпляра оттуда.
Теперь, как вы видите, я выполняю все задачи в конвейере, я хотел бы изменить это следующим образом:
- Входные данные для метода
Execute
для следующей задачи должны поступать из ранее выполненной задачи. - Если
CanExecute
не удается выполнить задачу, конвейер должен прекратить обработку задач.
Не могли бы вы помочь мне в получении этого. Также вы ожидаете, что код будет структурирован по-другому для этой цели?