Ho una serie di attività che fondamentalmente è una variante del modello di catena di responsabilità.Esecuzione della variazione della catena di responsabilità
Un compito nel mio cantiere sembra come di seguito
internal interface IPTask<T>
{
bool CanExecute(T instance);
T Process(T instance);
}
..e il mio processore sembra
internal interface IProcessor<T>
{
T Execute(T instance);
}
e la mia concreta applicazione si presenta così:
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;
}
}
.. e i miei compiti assomigliano a questo:
internal interface ITasks<T>
{
IEnumerable<IPTask<T>> GetTasks();
}
T potrebbe essere istanze diverse, ma vincolato da un contratto generico. Uno dei compiti riguarda la mappatura dell'oggetto in entrata in un oggetto completamente diverso e l'inoltro dell'istanza da lì in poi.
Ora, come si vedrebbe, che sto eseguendo tutti i compiti in cantiere, vorrei modificare questo al seguente:
- Input per il metodo
Execute
per il prossimo compito dovrebbe essere dalla compito precedentemente eseguito. - Se lo
CanExecute
non riesce per un'attività, la pipeline dovrebbe interrompere l'elaborazione delle attività.
Potete per favore aiutarmi a ottenere questo. Inoltre, ti aspetteresti che il codice sia strutturato diversamente per questo scopo?