Diciamo che ho un insieme di Task che hanno dipendenze. Queste attività non sono in ordine, ma l'esecuzione delle attività dovrebbe essere nell'ordine corretto. Ogni attività ha due proprietà: Prima e Dopo.
Prima contiene un elenco di attività dipendenti dal risultato di questa attività, quindi dovrebbe essere eseguito prima di esse; Dopo contiene un elenco di attività che dipendono da queste attività specifiche. Quindi ci sono due modi per dire che B dipende dal risultato di A:
a) Aggiungi A alla B dopo l'elenco
b) Aggiungi B alla lista Befor di A
In entrambi i casi dovrebbe funzionare. Inoltre ci può essere gap tra le attività e dovrebbe essere compilato automaticamente al momento dell'esecuzione. Ad esempio, immaginiamo di avere i seguenti compiti:
Task1
|____ Before: Task3, Task4
|____ After: NA
Task4
|____ Before: Task8
|____ After: Task3
Task2
|____ Before: NA
|____ After: Task1
Task3
|____ Before: Task5
|____ After: Task2
Task5
|____ Before: Task7
|____ After: Task3
Quindi qui c'è un po 'di ambiguità su quale task dovrebbe essere eseguita prima: Task4 o Task5? Ma non è importante finché vengono eseguiti dopo Task3 e prima di Task7 e Task8. Questo dipende dall'algoritmo per metterli nel posto giusto.
L'unico modo che posso pensare di fare questo è di eseguire prima la scansione di tutte le attività e fondamentalmente registrare le dipendenze e quindi ricominciare ed eseguire ogni attività ora nel loro giusto ordine.
La complessità / efficienza dell'algoritmo non è molto importante in quanto ho meno di 500 task da ordinare prima di eseguirli, ma preferisco usare un algoritmo o un metodo ben noto per risolverlo, piuttosto mettere insieme le cose solo per ottenere fatto.
Aggiornamento: Il motivo principale per cui ho bisogno delle proprietà Before e After è la riduzione dell'errore umano durante la creazione delle attività. per esempio. È più semantico dire che CreateDirectory
è Dopo LoadConfiguration
e Prima CopyFiles
. Ovviamente puoi dire che CopyFiles
è dopo CreateDirectory
e CreateDirectory
dopo LoadConfiguration
.
Ma alla fine tutti questi verranno convertiti solo nelle proprietà Dopo .