Questa attività può essere visualizzata come 3 attività secondarie differenti. È necessario definire come devono essere specificate le condizioni. Hai bisogno di una rappresentazione delle condizioni. E devi integrarlo nel programma.
Come specificare le condizioni
A meno che tu non sia in grado di programmare, sembra che tu abbia bisogno di un DSL (lingua specifica per il dominio). Se gli sviluppatori scrivono o aiutano gli esperti di dominio a scrivere, le condizioni e le azioni, qui definite "regole", possono essere probabilmente eseguite con una versione testuale. Un'opzione, se si usano linguaggi di scripting, è di fare effettivamente le regole in quella lingua con un po 'di zucchero sintattico. Ma dal momento che usi Java, dovrai compilarlo.
Ad esempio, il linguaggio potrebbe essere simile a questo:
IF card = normal AND years < 20 THEN set credit = 500
Il frammento di cui sopra ha un sacco di contesto. Se puoi evitare di essere ambiguo, allora questo può rendere la lingua molto più semplice. Per esempio, di chi "anni" stiamo parlando prima? Bene, se le regole vengono valutate nel contesto di una carta, allora è il proprietario della carta. Ma se non è chiaro, la lingua potrebbe dover essere più complicata, ad es. 'anni (proprietario (carta))', e potresti iniziare a spaventare gli utenti normali con le parate.
Se non sono gli sviluppatori che scrivono le condizioni, dovresti prendere in seria considerazione uno strumento grafico intorno alla tua lingua. Lo strumento grafico può limitare le opzioni, per evitare errori di ortografia, ad esempio, e guidare gli utenti alle opzioni disponibili.
Modello semantico
Avere qualche modello formale di linguaggio. Questo potrebbe essere un albero di sintassi astratto per le espressioni. E la radice è un nodo con due figli, un nodo di condizione e un nodo di azione. Quindi, per valutare le regole per alcuni contesti, trovi tutte le regole definite dall'utente, valutale usando l'albero di sintassi astratto e la condizione è vera, quindi esegui l'azione. Potresti anche interpretare le regole per gestire i conflitti. Ad esempio, cosa succede se c'è un'altra regola che dice "se la carta è normale e l'età dell'utente inferiore a 15 allora imposta il credito a 300"? Ora si applicano entrambe le regole, ma se ciò non è desiderabile, è possibile informare l'utente. Attenzione, tuttavia se il tuo linguaggio è troppo potente, questo può essere indecidibile, il che significa che non puoi rilevare tutti questi conflitti.
Il frammento di cui sopra potrebbe risultare in una struttura sintattica astratta come la seguente:
________________RULE____
/ \
AND ACTIONS
______/ \______ |
/ \ _SET_
_ = _ _ < _ / \
/ \ / \ credit 500
card normal age 20
Interprete
Devi implementare un interprete o il tuo modello semantico. Questo eseguirà il modello contro i dati che hai. Ad esempio, utilizzare i dati correnti nel sistema, per verificare le condizioni descritte dal modello semantico, quindi eseguire le azioni appropriate che aggiornano i dati.
Ad esempio lo pseudocodice per elaborare il setNode potrebbe essere simile a questo:
onVisitSet(SetNode setNode, CardContext context) {
if (setNode.assignType == CARD) {
Account account = context.getAccountForCard();
account.setBalance(500);
} else if (...)
//....
}
Ricorda, anche se le banche reali non si limitano a "stabilire" un equilibrio.