Sto cercando di migliorare questo parser di documenti e c'è un ciclo principale che va su tutti gli elementi principali (chiamiamoli Node
s). Ogni passaggio ( Step
) può essere Consume
o Ignore
il Node
che viene passato. Un Step
può anche essere avido e consumare più del singolo Node
di quello che gli è stato passato. Un Step
potrebbe limitare la sua transizione ad altri stati come una macchina a stati. Non riesco a rimuovere Node
dall'elenco dei nodi, poiché questo mi porterebbe in raccolta modificata durante l'enumerazione dei problemi e sarebbe difficile accelerare il ciclo principale
Quale design andrebbe bene per questo?
Ecco qualcosa che ho considerato di implementare.
class Node { ... }
class Step
{
void Handle(NodeContext);
...
}
class NodeContext
{
Node Node { get; }
void Ignore();
void Consume();
}