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.