Tutta la logica aziendale può essere scomposta come un diagramma di stato (dichiarativo) su semplici operazioni e condizioni condizionali?

4

Questa sembra una domanda estrema probabilmente, ma mi chiedo comunque:

Tutta la logica aziendale può essere scomposta come diagramma di stato (dichiarativo) su semplici operazioni e condizioni condizionali?

Già un lotto di logica di dominio di livello inferiore può , e ofen è dichiarativamente definito con mappature ORM, per esempio, gestendo cose come :

  • schema del modello di dominio
  • convalida
  • vincoli di unicità
  • ACL / Autorizzazione basata sui ruoli, ecc.

Ovviamente esiste una logica di dominio di livello superiore che spesso comporta il coordinamento tra più Oggetti Dominio.

Tuttavia, sembra in definitiva:

  • Questa logica aziendale di alto livello è in realtà solo un flusso di lavoro che può essere modellato come macchina di stato (o probabilmente più estesa come una petrinet estesa)
  • in cui tutte le diramazioni si basano su una logica condizionale in alcuni stati (vale a dire: attributi dell'oggetto dominio)
  • il risultato sarebbe un cambio di stato, cioè una modifica agli attributi dell'oggetto dominio (semplici operazioni di crud).

Se questo è il caso, tutta la logica del dominio potrebbe essere definita in modo dichiarativo, dato un DSL che supporterebbe i costrutti di lavoro, condizionali e CRUD sopra menzionati?

Se disattivi questo braindump, per favore sii perspicace mentre lo fai:)

    
posta Geert-Jan 25.09.2013 - 21:18
fonte

2 risposte

6

Sì, può, ma solo in un senso praticamente inutile.

I motori di calcolo che usiamo oggi sono in definitiva equivalenti alle macchine di Turing, che fanno esattamente quello che descrivi (in effetti, fanno di meno, perché hanno solo una memoria ad accesso lineare per lavorare con una memoria piuttosto casuale, ma si può dimostrare che questo non fa differenza). Ma le macchine di stato che dovresti operare per codificare anche un semplice programma applicativo sono così disgustosamente terrificantemente enormi che non si tratta di in realtà in pratica con questo modello di calcolo. Esiste solo come entità matematica teoricamente possibile di dimensione finita, ma sul lato grande di "finito".

Il punto di ingegneria del software come disciplina è quello di trovare metodi per programmare macchine per un comportamento più complesso con programmi più piccoli e più comprensibili. Leggere e scrivere singole variabili è più facile che passare da uno stato a uno stato vicino che è quasi lo stesso eccetto per una sottoposizione nel suo alfabeto composito. Scrivere i loop è più facile che lasciare dei marker su un nastro infinito e fare lo shuttling avanti e indietro finché non si verifica un valore sentinella.

Questo non vuol dire che le macchine statali non abbiano il loro posto. Quando un dominio problematico può essere naturalmente inteso come transizioni all'interno di un mentalmente gestibile spazio degli stati, possono essere la soluzione più appropriata per codificare alcune operazioni. Tuttavia, queste situazioni sono abbastanza rare da poter praticamente dimenticarle finché non ne incontri effettivamente uno.

    
risposta data 25.09.2013 - 21:37
fonte
0

Mi sono imbattuto in questa domanda cinque anni dopo e sembra più rilevante che mai. La programmazione funzionale e le DSL sono al momento perfette, ed entrambi sono esempi di comportamento dichiarativo.

Sì, credo che tutte le logiche di business possano essere definite in modo dichiarativo. La maggior parte dei comportamenti specifici del business si stanno spostando e visualizzando i dati. Abbiamo già specificato la maggior parte dei dati in modo dichiarativo, come schemi nei nostri database. Il modo in cui i movimenti dei dati possono essere specificati tramite diagrammi di stato o tecniche simili e le autorizzazioni possono essere impostate mediante autorizzazioni dichiarative su quando e come i dati possono essere spostati.

Inoltre, forse tutti i comportamenti specifici del business dovrebbero essere dichiarativi e solo un comportamento generico per le aziende può essere imperativo. Quante volte i programmatori hanno implementato "metti questo indirizzo in un database, se è ben formato"? In un mondo dichiarativo aziendale, un programmatore creerebbe uno schema e regole / diagrammi di stato aziendali, permessi, ecc. Quindi avrebbero trovato i componenti dello scaffale per eseguire le regole. Se avessero avuto bisogno di qualche nuovo strumento, avrebbero creato un DSL per esso, quindi lo avrebbero implementato in un modo generico di dati.

    
risposta data 01.12.2018 - 13:21
fonte