Garantire il corretto ordine di esecuzione in un'architettura plug-in / modulo

0

Immagina una semplice architettura basata su moduli, c'è il sistema Core che contiene una serie di valori casuali. È possibile creare moduli / plug-in che interagiranno con questo array.

  • Il plugin A vuole anteporre un valore in qualche array globale
  • Il plugin B vuole lo stesso ma un valore diverso
  • Il plugin C metterà un valore alla fine

Il plug-in A e il plug-in B entrambi vogliono che i loro dati siano all'inizio dell'array per definizione. Ovviamente non è possibile, ma ora dipende completamente dall'ordine di esecuzione, e se l'ordine cambia il comportamento del programma sarà diverso.

Come fa un plugin a dire al sistema centrale che ha davvero bisogno di avere questo valore nel primo elemento dell'array. Che cosa farebbe il core se entrambi i plug-in specificassero che "realmente ha davvero bisogno di essere così".

Idealmente un plugin non interessa e non conosce altri plugin, immagina che ci siano 20 plugin. Sarebbe un casino se provassi a considerare l'un l'altro plug-in in ogni plugin.

Ho pensato di aggiungere una valutazione basata sulla rilevanza. Ad esempio, ogni plugin che interagisce con l'array deve specificare un valore di pertinenza (un enum per esempio) che specifichi quanto sia importante che il cambiamento debba essere esattamente come quello, o se non è importante.

    
posta Aurus 09.08.2016 - 23:07
fonte

2 risposte

2

Hai solo due opzioni qui:

  • Aggiungi una priorità (o pertinenza come hai chiamato tu) quando i plugin si registrano / la loro azione

o

  • Ultimo / Il primo vince l'approccio. Qualunque sia il registro dei plug-in per ultimo / primo sarà quello che ottiene il punto in cima alla tua struttura

Non puoi fare nient'altro (oltre a decidere a caso) se non puoi risolvere questa contraddizione dal lato dei requisiti (che è il problema reale )

    
risposta data 10.08.2016 - 09:19
fonte
1

Dato che non hai dato una ragione per cui qualsiasi altra cosa, oltre al plugin, interessa dove è l'inizio dell'array globale, puoi semplicemente dire a ciascun plugin, "certo piccolo amico, sei all'inizio. iniziare per te è a 0xFFFF0042 ".

    
risposta data 10.08.2016 - 04:53
fonte

Leggi altre domande sui tag