coreBOS story: coreBOS Rules

Questa settimana nella coreBOS Story si approfondiscono la classe Rules e le sue caratteristiche. L’articolo originale in inglese è disponibile sul blog ufficiale del progetto.

d816672dff5867dfcc05fb6e0387a9879f9e7a7a-rule (1).png

Le regole di business (business rules) sono, nella maggior parte dei casi, definite all’esterno dell’applicazione. Spesso sono persino scritte in un linguaggio diverso da quello utilizzato per creare l’applicazione stessa. La classe Rule di coreBOS fornisce un motore consentendo di eseguire in modo semplice le regole di business ed è in grado di essere allo stesso tempo efficiente ed estensibile.

Ho deciso di integrare la libreria HOA\Ruler all’interno di coreBOS.

L’obiettivo era quello di avere un’interfaccia facile che ci consentisse di separare le decisioni di business dal codice.

Leggendo la documentazione relativa ad una loro soluzione molto ben disegnata, iniziai a cambiare idea sull’usare o meno il loro prodotto; non perché non sia un prodotto MOLTO buono, perché lo è, ma perché si scopre che noi disponiamo già di un sistema di regole!

Definiscono le regole come tre parti:

1.- Definendo una regola. Una regola è una stringa che corrisponde ad una sintassi specifica, che viene descritta dalla grammatica del linguaggio utilizzato.

Quando lessi della grammatica e della corretta sintassi, vidi che avremmo dovuto, almeno, modificarla per far sì che accettasse i nomi dei campi di entità coreBOS e la forma estesa di questi campi, i quali ci permettono di accedere ai campi nei moduli connessi.

3.- L’utilizzo di un assertore per l’esecuzione. Questo è semplicemente del codice che legge la regola, cambia le variabili con valori presi dal contesto e valuta la regola per poi dare un risultato.

HOA/Ruler è un predicato, per cui da solo risultati Vero/Falso, il che è un po’ limitante in un’applicazione estensiva come coreBOS dove noi vorremmo essere in grado di ricevere numeri, stringhe, array dei record,…

Quindi, dopo aver letto la documentazione del progetto HOA\Ruler (che consiglio vivamente, è una lettura molto interessante) capii che noi disponevamo già di un sistema di regole all’interno di coreBOS e che non c’era alcun bisogno di aggiungere un’altra libreria libreria esterna.

1.- Per definire una regola in coreBOS possiamo utilizzare il linguaggio d’espressione del workflow. I benefici sono chiari, poiché nativamente supporta già tutti i campi e le relazioni; se sai come utilizzare il workflow, sai già anche come usare le regole. Qualsiasi miglioramento fatto nelle espressioni del workflow per rendere le regole più flessibili e potenti, renderà migliori anche i workflows..

2.- Il contesto è il record dell’entità CRM che noi vogliamo utilizzare per valutare le regole, è semplicemente una normale entità CRM con la quale l’applicazione sa già come collaborare.

3.- L’asserter o il valutatore doveva essere implementato. Ho dato un’occhiata veloce alle mappe business esistenti Condition Query e Condition Expression perché sapevo che queste mappe facevano qualcosa di molto simile e dopo un’ora o poco più avevo pronto un prototipo funzionante di coreBOS Rules.

Dopo aver creato il codice iniziale ebbi la conferma dei miei sospetti e capii che noi disponevamo già un sistema di regole molto potente e flessibile all’interno di coreBOS.

Ho quindi aggiunto alcune prove d’unità ed ho ultimato la sperimentazione e l’implementazione della classe.

Ne ho poi documentato l’utilizzo nella pagina wiki che dovrebbe essere la vostra prossima fermata se desiderate imparare ad usare questo strumento di sviluppo.

Unitevi alla conversazione su gitter e fatemi sapere se avete bisogno di aiuto.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s