Dativity este o biblioteca de motoare de flux de lucru fara stat, bazata pe date, pentru Clojure si ClojureScript.

Este inspirat de modelul procesului de afaceri centrat Artifact.

Cuprins

Caracteristici de

proiectare a motivatiei Exemple Licenta de dependente

Ultima versiune

Consultati Changelog pentru continutul lansarii.

Motivatie

Motoarele de proces conventionale, cum ar fi Activiti si Camunda, sunt centrate in jurul secventei in care ar trebui efectuate activitatile, adesea modelate utilizand BPMN.

Ideea cheie a dativitatii este ca progresia datelor este principalul motor al unui flux de lucru. Se realizeaza prin dezvaluirea actiunilor care pot fi efectuate, avand in vedere modul in care actiunile depind de date si ce date sunt disponibile in prezent, mai degraba decat actiunile care trebuie efectuate.

De exemplu, o cerere de asigurare nu poate fi revizuita pana nu a fost depusa. Actiunea de trimitere produce date – cererea, iar actiunea de revizuire depinde de aceasta. De indata ce exista o reclamatie, este posibil sa efectuati actiunea de examinare.

Multe instrumente de proces de afaceri necesita o baza de date pentru a urmari progresul unui flux de lucru. Prin adoptarea modelului de proces de afaceri centrat pe Artifact, dativitatea este capabila sa ofere aceeasi valoare de baza ca acele alte instrumente fara a necesita o baza de date dedicata. Depinde de dvs. sa decideti cum sunt stocate datele.

Fiind apatrid, dativitatea va permite sa reduceti complexitatea aplicatiei.

Aceasta postare pe blog ofera o motivatie mai extinsa.

Proiecta

Dativitatea modeleaza un proces in trei entitati diferite:

  • Actiune
  • Date
  • Rol

Entitele se raporteaza in urmatoarele moduri:

  • Datele (verzi) sunt necesare printr-o actiune
  • Actiunile (violet) produc date
  • Rolurile (galbene) efectueaza o actiune

un proces simplu de solicitare a creditului

In exemplul de mai sus, actiunea „create case” produce datele „case id” si „client-id”. Atunci cand acele informatii au fost adaugate la caz, „enter-loan-details” poate fi efectuat deoarece depinde doar de „case-id” sa fie prezent.

Caracteristici

Functionalitate de baza

Avand in vedere o definitie a procesului si un set de date colectate, Dativity poate raspunde la intrebari precum:

  • Ce actiuni pot fi efectuate in continuare?
  • Ce actiuni pot fi efectuate in continuare de rolul r
  • Ce actiuni au fost efectuate?
  • Poate fi efectuata o actiune ?
  • Ce date sunt necesare pentru actiunea a ?

Invalidare

Uneori, un utilizator se intoarce si modifica datele. Apoi, toate datele care sunt produse „ulterior” trebuie invalidate. Nasterea Domnului este sustinuta pentru acest tip de scenariu, in care cazul este „inapoi” la actiunea care a fost refacuta. Datele introduse anterior sunt pastrate, dar „neconfirmate”, iar actiunile in functie trebuie efectuate din nou. vezi exemplu.

Cerinte conditionate

Este posibil sa se specifice ca o data este necesara printr-o actiune daca si numai daca un predicat dat este adevarat. Conditia depinde de datele specificate. vezi exemplu.

Exemple

Functionalitate de baza

Datele despre caz sunt doar o harta

Definiti un model de caz cu actiuni, date, roluri si relatiile acestora.

(def case-model (dativity.define / create-model {: actions [: create-case: enter-loan-details: produce-credit-application-document: sign-credit-application-document: payout-loan): date [: caz-ID: client-ID: imprumut-detalii: credit-cerere-document: solicitant-semnatura: ofiter-semnatura: imprumut-numar]: roluri [: solicitant: sistem: ofiter]: actiune-produce [[: crea -case: client-id] [: create-case: case-id] [: enter-loan-details: loan-details] [: produce-credit-application-document: credit-application-document] [: sign-credit -document-cerere: semnatura solicitantului] [: semn-credit-cerere-document: ofiter-semnatura] [: plata-imprumut: imprumut-numar]]: actiune-necesita [[: introduce-imprumut-detalii: caz-id ] [: produce-credit-application-document: credit-details] [: produce-credit-application-document: id-client] [: sign-credit-application-document:document-cerere-credit] [: imprumut de plata: semnatura solicitantului] [: imprumut de plata: semnatura-ofiter]]: indeplineste rolul [[: solicitant: creati-caz] [: solicitant: introduceti-detalii-imprumut] [: solicitant: semn-credit-cerere-document] [: ofiter: semn-credit-cerere-document] [: sistem: plata-imprumut] [: sistem: produce-credit-cerere-document]]: actiune-necesita- conditionat []}))

Generati o imagine a definitiei procesului (necesita numai graphviz, clj).

escuchar relatos porno cine porno español
sexo con viejas tias putas
porno chileno xxxjovenes
folladas dormidas comiendo polla
viejasxxx glory hole españa
seso gratis fontanero cachondo
peliculas porno traducidas al castellano xxxmamas
maduras en castellano cerdas com gratis
sexo gratis porno videos heroticos
madres cachondas hombres corriendose
videos de follar chicas masturbando a chicos
madre pajea a su hijo jovenes nudistas
descargar videos porno gratis porno gay marruecos
follando en español megacorridas
orgias con abuelas gordas corriendose
follada en tanga porno incesto real
peliculas porno de incesto en español porno transexual en español
madres españolas follando con hijos follando real
rajas peludas penes gordos
hijo viola a su madre porno madres haciendo pajas a sus hijos

(dativity.visualize / generate-png case-model)

Ce actiuni sunt posibile?

(dativity.core / next-actions case-model case) => # {: create-case}

Ce pot face rolurile?

(dativity.core / next-actions case-model case: solicitant) => # {: create-case} (dativity.core / next-actions case-model case: officer) => # {}

Ce date sunt produse de „: create-case”?

(dativity.core / data-producer-by-action case-model: create-case) => # {: client-id: case-id}

Adaugati cateva date in carcasa pentru a simula cateva actiuni

(def case (-> case (dativity.core / add-data: case-id “542967”) (dativity.core / add-data: client ID “199209049345”)) (dativity.core / add-data: loan- detalii {: suma 100000: scop „acasa”}))))

Ce actiuni au fost finalizate?

(dativity.core / actions-Performed case-model case) => # {: enter-loan-details: create-case}

Cine poate face ce?

(dativity.core / next-actions case-model case: solicitant) => # {} (dativity.core / next-actions case-model case: system) => # {: produce-credit-application-document} (dativity .core / next-actions case-model case: officer) => # {}

Documentul este produs si este semnat de ofiter

(def case (-> case (dativity.core / add-data: credit-application-document {: document-id “abc-123”})))

Cine poate face ce?

(dativity.core / next-actions case-model case: solicitant) => # {} (dativity.core / next-actions case-model case: system) => # {} (dativity.core / next-actions case- model case: officer) => # {: sign-credit-application-document}

Invalidare

Un utilizator ar putea sa revina in interfata dvs. de utilizare si sa modifice datele, atunci este probabil ca datele „ulterioare” sa nu mai fie valabile. De exemplu, daca valoarea imprumutului este modificata, documentul de cerere produs nu mai este valabil.

Dativitatea sprijina acest lucru prin intermediul functiei invalidate-data. Cand o data este invalidata, toate datele care sunt produse de actiuni care depind de datele invalidate sunt invalidate recursiv.

Cand datele sunt invalidate, nu sunt sterse. Datele sunt pastrate, dar sunt „neacceptate”, ceea ce inseamna ca dativitatea va spune ca actiunile care depind de datele neacceptate nu sunt permise.

(def case (dativity.core / invalidate-data case-model case: credit-details))

Detaliile imprumutului au disparut din caz?

(: credit-details case) => {: suma 100000: scop „acasa”}

Acum singura actiune disponibila este sa introduceti din nou detaliile imprumutului.

(dativity.core / next-actions case-model case: solicitant) => # {: enter-loan-details} (dativity.core / next-actions case-model case: system) => # {} (dativity.core / next-actions case-model case: officer) => # {}

Nu este posibil sa semnati documentul cererii de credit.

(dativity.core / action-allowed? case-model case: sign-credit-application-document) => false

Date necesare conditionate

O margine de actiune necesita date (sageata rosie din diagrama) poate fi conditionata. Cerinta este aplicata daca si numai daca un predicat dat este adevarat. Predicatul este o functie a unui anumit nod de date.

Pentru a spune ca cererile de imprumuturi de peste 300 000 necesita semnaturi de la doi ofiteri pe care ii putem scrie

(def case-model (dativity.define / add-relation-to-model case-model (dativity.define / action-requires-conditional: payout-imprumut: contrasemnare) (fn [detalii imprumut] (> (: suma detalii imprumut) 300000)): detalii imprumut)))

Dependente

graphviz

Pentru a genera imagini grafice aveti nevoie de graphviz.

Verificati daca este instalat pe sistemul dvs. (mac): dot -v

Daca nu, instalati-l: brew install graphviz

Ubergraph

Ubergraph este folosit ca adaptor pentru graphviz pentru vizualizare si nu este utilizat de principalele spatii de nume, deci nu va fi inclus intr-o cljs build.

Ysera

Ysera este o biblioteca de convenienta din care sunt utilizate macrocomenzi de testare si erori.

Licenta

Licenta MIT

Copyright (c) 2019 Morgan Bentell