Esiste un modello di progettazione per la modellazione del flusso di esecuzione del lavoro?

3

Nella mia applicazione ho un set di lavori da eseguire:

  • Ogni lavoro passa attraverso gli stati "non avviato", "avviato", "completato", "non riuscito" ecc.
  • Ogni lavoro ha una serie di pre-condizioni e post-condizioni.
  • Il lavoro non può essere avviato finché non sono soddisfatte le condizioni preliminari e deve essere contrassegnato come non riuscito se non soddisfa le condizioni del post.

Ad esempio, supponiamo che il lavoro importi un file di testo nel database. La pre-condizione sarebbe quella di verificare se il file sorgente esiste e la post-condizione sarebbe di verificare se i dati esistono nel database. Oltre a queste pre e post-condizioni, a volte il lavoro dipende anche da altri lavori da completare. È facile creare una tabella di lavori e disporre di una tabella di dipendenze per i lavori, ma è effettivamente possibile rendere questi controlli di pre e post validazione configurabili nel database (in modo che non sia necessario apportare modifiche al codice se queste condizioni cambiano o nuove le condizioni sono aggiunte)?

Anche se è possibile in qualche modo, è una buona idea farlo? È necessario rendere questo modello generico in modo che altre applicazioni possano utilizzarlo anche se i controlli di convalida da eseguire sono completamente diversi per altre applicazioni.

    
posta RKP 13.01.2012 - 16:47
fonte

2 risposte

1

but is it actually possible to make these pre and post validation checks to be configurable in database (so that no code changes need to be made if these conditions change or new conditions are added)?

Sì. È banalmente possibile. Ci sono molte tecniche.

  1. Inventa il tuo linguaggio specifico del dominio per questo. E scrivi il tuo interprete.

  2. Utilizza BPEL.

  3. Usa qualsiasi linguaggio dinamico (Python, Ruby, Lua, ecc.) e inserisci il codice nel database.

is it a good idea to do so?

No.

Il codice è rappresentato al meglio come codice.

I controlli pre-condizione sono spesso lasciati come codice. Ant, Maven e Scons forniscono tutti modi per farlo nel codice.

There is a requirement to make this model generic so that other applications can also make use of it even if the validation checks to be performed are entirely different for other applications.

Leggi su Ant, Maven e Scons per gli approcci che funzionano bene.

Inoltre, ci sono molti prodotti commerciali che fanno questo.

Infine, dovresti essere in grado di utilizzare Google "programmi di pianificazione batch open source" e trovare ancora più soluzioni a questo problema ben compreso e già risolto.

Non hai davvero bisogno di risolverlo di nuovo.

    
risposta data 13.01.2012 - 17:21
fonte
0

In teoria, potresti teoricamente creare una tabella delle condizioni e post condizionali legata ai lavori, ma l'implementazione sarebbe estremamente complessa. In primo luogo, determinerei la frequenza delle modifiche alle dipendenze del lavoro e sulla base di ciò proverò a decidere se valga la pena di creare un tale sistema. Se ritieni che le modifiche si verifichino settimanalmente, si tratta di uno scenario completamente diverso rispetto all'anno.

Anche un requisito per rendere generico qualcosa è facile da dire, ma molto più difficile da implementare e può non essere realistico per molte applicazioni. ci sono attualmente le applicazioni esistenti che sono destinate a essere in grado di utilizzare questo gestore di lavoro? le applicazioni sono concepite per utilizzare questa soluzione generica in modo simile a una soluzione generica in grado di risolvere effettivamente le esigenze di tutte le applicazioni? Ne vale la pena se hai dei dubbi da esaminare se una soluzione generica è effettivamente ciò che è necessario o se è addirittura possibile, quindi comunica al tuo manager che so che questo progetto ha richiesto una soluzione generica, ma che richiederà X mesi più del questa soluzione, o non possiamo creare una soluzione generica che sarebbe accettabile perché le applicazioni di destinazione sono troppo diverse.

    
risposta data 13.01.2012 - 17:22
fonte