Esiste qualcosa come un modello di flusso di lavoro? o come fare correttamente un flusso di lavoro?

6

(e alternative a un motore di workflow)

Problema: Ho vari input con vari attributi. Ad esempio {name: john, country: US} and {name: Jose, country: MX}

E ho i seguenti flussi di lavoro per l'attività Enter Country

Cittadino statunitense:

Step1 Validate US Passport

Step2 Declare Goods at Customs

Cittadino non statunitense

Step1 Provide Visa

Step2 Validate Country passport

Step3 Declare Goods at Customs

(Bare con me mentre sto cercando di pensare a un esempio coerente)

Caratteristiche, esistono passaggi condivisi tra i flussi di lavoro e in base al risultato (superato o non superato) può attivare un'altra attività (qualcosa come "Rifiutato dal Paese")

Le due opzioni sono:

- Posiziona la logica decisionale su ogni fase stessa, in cui vengono forniti gli input. (pros - nessuna duplicazione, contro - complicato leggere i passaggi usati)

-Posiziona la decisione come primo passo e scegli un flusso di lavoro come passo iniziale (pros - facile da leggere, contro - possibile duplicazione)

In futuro potrebbe esserci la necessità di far fluttuare questa logica agli utenti per creare flussi di lavoro personalizzati.

Qual è l'approccio migliore per questo tipo di problema?

    
posta salparadise 24.03.2016 - 02:14
fonte

2 risposte

2

Separa le tue preoccupazioni: hai azioni e hai un flusso di lavoro che può chiamare azioni.

Le azioni possono essere definite come funzioni. Il flusso di lavoro può essere definito come un elenco di funzioni applicate a un dizionario. È quindi possibile inserire i flussi di lavoro in un dizionario in modo da poterli trovare facilmente.

def validate_passport(env_dict):
    ...

def provide_visa(env_dict):
    ...

def declare_goods(env_dict):
    ...

us_citizen_workflow = [ validate_passport, declare_goods ]
mex_citizen_workflow = [ provide_visa, validate_passport, declare_goods ]

workflows_by_country = { "US":us_citizen_workflow,  
                         "MEX":mex_citizen_workflow }

def process_entry(person):
    env_dict = person.copy()
    for work_step in workflows_by_country[person["country"]]:
        work_step(env_dict)
    return env_dict["entry_status"]

Le elaborazioni includeranno flussi di lavoro che chiamano altri flussi di lavoro, uscite di cortocircuito (probabilmente generando eccezioni), servizi di debug che consentono di verificare la validità del dizionario di ambiente tra i passaggi, ecc.

    
risposta data 25.03.2016 - 19:51
fonte
1

Mi sono imbattuto in questa domanda alla ricerca di una risposta simile da solo. Quello che ho trovato è "Rete Algorithm", che è ben spiegato qui: link

Per il tuo esempio, country sarebbe quindi un nodo Alfa, al di sotto del quale ogni paese (gruppo) si blocca e sul quale connetti le azioni, che sono i tuoi passi di flusso di lavoro. Dopo aver selezionato i passaggi, dovrai ordinarli in base a un determinato ordine.

Non ho alcun esempio di come questo sembrerebbe comunque in termini di codice. Trovo riferimenti a "Pychinko" come implementazione di Rete, ma la maggior parte dei collegamenti che ho trovato erano morti. Sembra che qualcuno l'abbia incluso qui nel loro repository, ma non c'è documentazione: link . Nello stesso repository c'è un altro rete.py in quel repository che afferma "un'implementazione della rete indipendente da pychinko, che usa IndexedFormula".

Altrimenti ci sono motori di regole come le regole PEAK, ad esempio.

    
risposta data 11.05.2016 - 02:44
fonte

Leggi altre domande sui tag