Mam szereg zadań, które zasadniczo są odmianą schematu odpowiedzialności.Wykonywanie łańcucha odpowiedzialności Zmiana
Zadanie w moim rurociągu wygląda jak poniżej
internal interface IPTask<T>
{
bool CanExecute(T instance);
T Process(T instance);
}
..i mój procesor wygląda
internal interface IProcessor<T>
{
T Execute(T instance);
}
i moja konkretna realizacja wygląda następująco:
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;
}
}
.. a moje zadania wyglądają tak:
internal interface ITasks<T>
{
IEnumerable<IPTask<T>> GetTasks();
}
T może być różną instancją, ale związaną umową ogólną. Jednym z zadań jest mapowanie przychodzącego obiektu na zupełnie inny obiekt i dalsze przekazywanie tej instancji.
Teraz, jak można zobaczyć, ja wykonując wszystkie zadania w rurociągu, chciałbym zmodyfikować to do następującej:
- wejściowe dla metody
Execute
do następnego zadania powinny być z tego wcześniej wykonane zadanie. - Jeśli zadanie nie powiedzie się
CanExecute
, rurociąg powinien przerwać przetwarzanie zadań.
Czy możesz mi pomóc w uzyskaniu tego. Czy spodziewałbyś się, że kod będzie inaczej skonstruowany w tym celu?