Ottimo modo per programmare un flusso di orchestrazione / processo

5

Sto programmando un processo in cui i clienti verranno separati in 3 gruppi diversi, e per ogni gruppo verrà eseguita un'azione diversa.

La mia domanda riguarda il processo di decidere quale client sarà in quale gruppo.

Come input ho ricevuto un diagramma di flusso con 7 blocchi decisionali.

Penso che tu possa immaginare il diagramma di flusso:

Se A e B e Not C e F allora sei nel gruppo 1.

Se A e non B e C ed E sei nel gruppo B. Se A e non B e C e non E ma F sei anche nel gruppo B.

In ogni caso, probabilmente ottieni ciò che intendo.

Quello che sto cercando è quello che è un buon modo per implementarlo?

Abbiamo trovato le seguenti soluzioni

1 programma il codice come se avessi scritto:

if A() && !B() && C() || (D() && E()) groupA.Add(client)
if A() && !B() && C() && F()) groupB.Add(client)

2 programma un GRANDE se / se / altro

if A()
    if B()

    else
        if ! C()

        else
else
    if C()

    else

ecc.

Ma ... entrambi non mi rendono felice, quindi mi chiedevo se c'era un modo migliore per risolvere questo?

    
posta Michel 28.05.2015 - 17:07
fonte

1 risposta

3

Ci sono sicuramente soluzioni là fuori che tentano di modellare i diagrammi di flusso in modo generico.

Cose come il fondamento del flusso di lavoro di Windows, SSIS, il routing nelle code di messaggi ecc.

Ma secondo la mia esperienza, a meno che il requisito non provenga da una fonte tecnica. cioè routing IP, fail over dns ecc dove esiste una specifica tecnica per la forma della logica. È meglio fare in modo che il codice corrisponda al documento dei requisiti il più fedelmente possibile al modo in cui descrive la logica

Avrai buchi nella logica e risultati che sembrano incoerenti, ma il tuo codice soddisferà i requisiti, e quando il requisito cambierà in qualche modo strano, non ti troverai a calpestarlo in un sistema generico intelligente che si aspetta che la logica essere espresso in un modo particolare.

Questo di solito si riduce a un blocco grande se. ma sarà facile da leggere e facile da modificare

Aggiornamento: ecco i modi in cui l'ho fatto / visto farlo in passato e rimpiangerlo

  • Approccio OOP, oggetti logici persistenti in documenti XML, dati in un altro, con elementi come < addPercentage condizionale="riferimento xpath a dati doc" value="10" >

il xpath si è presto complicato molto con le espressioni personalizzate, gli utenti non si sono mai preoccupati di usare l'interfaccia, quindi gli sviluppatori ricevono comunque richieste di modifica della logica.

  • eval script vb memorizzato in db

Gli utenti non possono fare script vb, elaborando come è stata presa una decisione, quasi impossibile.

  • eval SQL (perché lo sappiamo)

Gli utenti non possono eseguire sql, gli stessi probori che con lo script vb

  • websphere java orchestration con servizi wcf (perché i consulenti installeranno una 'lingua di dominio'

Gli utenti non possono fare java / 'lingua di dominio' una volta che i consulenti se ne vanno. Assumi nuovo team di java devs, problemi di controllo di implementazione / sorgente con IDE basato sul web

  • interprete Lisp. OMG No.

  • Windows Workflow Foundation

obsoleto anche quando lo abbiamo usato, oltre complicato per piccoli compiti. difficile da spiegare agli utenti

  • Pacchetti SSIS / DTS perché hanno un'interfaccia drag & drop!

Strumento hacky per amministratori di db non di programmazione, controllo della versione, distribuzione, debugging, difficoltà di esecuzione. non scalabile.

    
risposta data 28.05.2015 - 17:46
fonte