Se i passaggi del flusso di lavoro di un'azienda possono risiedere esclusivamente in un database, esiste un motivo per utilizzare un motore di flusso di lavoro per eseguire tali passaggi?

0

Ho trovato varie librerie in C #, PHP, Python, ecc. per i flussi di lavoro. Per flusso di lavoro intendo qualcosa come un dipendente desidera un tempo personale e tale richiesta inizia con il dipendente e termina in alcuni repository dopo l'approvazione / disapprovazione. (Esempio molto piccolo: in realtà è molto più grande.)

Nella mia domanda so che posso inserire dati e passaggi solo nel database, se mi piace. La mia domanda è se lo faccio, cosa stanno facendo queste librerie che non posso fare interrogando il database senza di loro?

BI non capisco perché avrei bisogno di qualcosa di diverso dal database per tenere i passaggi e la mia posizione corrente nei passaggi. Se ho bisogno di progettare il mio sistema, perché usare queste librerie?

Nota, non sto chiedendo se ho bisogno di un flusso di lavoro, solo quale scelta progettuale dovrei fare e perché.

Esempio in C #, link

builder
            .StartWith(context =>
            {
                Console.WriteLine("Starting workflow...");
                return ExecutionResult.Next();
            })
            .Then<AddNumbers>()
                .Input(step => step.Input1, data => data.Value1)
                .Input(step => step.Input2, data => data.Value2)
                .Output(data => data.Value3, step => step.Output)
            .Then<CustomMessage>()
                .Name("Print custom message")
                .Input(step => step.Message, data => "The answer is " + data.Value3.ToString())
            .Then(context =>
                {
                    Console.WriteLine("Workflow comeplete");
                    return ExecutionResult.Next();
                });

O una macchina a stati in C #, link

phoneCall.Configure(State.Connected)
    .OnEntry(() => StartCallTimer())
    .OnExit(() => StopCallTimer())
    .Permit(Trigger.LeftMessage, State.OffHook)
    .Permit(Trigger.PlacedOnHold, State.OnHold);

O PHP Symfony, link

$definition = $definitionBuilder->addPlaces(['draft', 'review', 'rejected', 'published'])
    // Transitions are defined with a unique name, an origin place and a destination place
    ->addTransition(new Transition('to_review', 'draft', 'review'))
    ->addTransition(new Transition('publish', 'review', 'published'))
    ->addTransition(new Transition('reject', 'review', 'rejected'))
    ->build()
;

Non vedo perché ho bisogno di questo invece di interrogare il database? Prima o poi devo colpire il database, perché anche queste librerie hanno librerie di persistenza.

Ho guardato qui,

Devo usare un motore di workflow?

Esiste un pattern del flusso di lavoro? o come eseguire correttamente un flusso di lavoro?

Più probabilmente userei C # se questo è importante, ASP.NET Core. Ma non penso che sia importante per questa domanda.

Nei miei commenti ho citato SQL. Non stavo cercando di implicare un uso SQL e nient'altro. Era nel contesto di un linguaggio di programmazione. Potresti usare EF con Linq. Non importa. Il mio punto era che potevo interrogare lo stato nel database, quindi perché le macchine a stati speciali e i flussi di lavoro. Ci scusiamo per la confusione.

    
posta johnny 05.09.2018 - 19:54
fonte

2 risposte

2

Il vero vantaggio di un "flusso di lavoro" è la modellazione dichiarativa del flusso di controllo.

Nel tuo esempio, una richiesta di assenza potrebbe passare attraverso la logica di ramificazione, portando a risultati diversi. Un flusso di lavoro raggruppa i passaggi logici.

' Applicazioni del flusso di lavoro ', da .NET, sono un'altra alternativa per visualizzare un flusso di lavoro. (Comprende macchine di stato e diagrammi di flusso). Sebbene la porta .NET Core sia ancora in corso di lavorazione.

Detto questo, certo, puoi concatenare un processo insieme come preferisci. Un semplice approccio SQL potrebbe essere approssimativo, ma probabilmente potresti anche elaborare qualcosa di intelligente con i 'trigger' di T-SQL.

Ciò che queste librerie hanno in comune è una configurazione di livello superiore e facilmente leggibile del processo.

Un buon flusso di lavoro può essere condiviso con partner commerciali non tecnici. Invece di limitarsi a codificare una determinata specifica, il flusso di lavoro stesso è la specifica.

    
risposta data 06.09.2018 - 00:52
fonte
0

SQL da solo, non è un linguaggio completo di touring. È certamente possibile implementare un motore del flusso di lavoro interamente nella maggior parte dei database moderni (T-SQL, PL / SQL, ecc.), Ma si finisce con un'interfaccia utente utile solo a chi sa leggere e capire quelle lingue, oltre agli strumenti non è progettato per supportare la tua applicazione, è progettato per interagire con il database.

Alcuni dei motori di flusso di lavoro esistenti hanno anche un ecosistema di codice di supporto, comprese le interfacce utente rivolte ai clienti e le API web friendly (come in REST). Se esegui il rollover, i tuoi clienti richiederanno che tu crei anche questi altri elementi.

    
risposta data 05.09.2018 - 23:25
fonte

Leggi altre domande sui tag