Algorithms in Business

everywhere

Zastosowanie silnika reguł biznesowych w systemie IT cz.II

silnik decyzyjny w przedsiębiorstwie
Ostatnio (Część 1) pisałem o rodzajach zmian w algorytmach aby zarysować problem, a dziś trochę szczegółów.

W jednym z naszych systemów udało się ograniczyć konieczność modyfikacji w kodzie w pierwszych trzech z czterech wymienionych sytuacji, a co za tym idzie – uniknąć wielu wdrożeń i podmian wersji.

Brak modyfikacji zestawu danych wejściowych i wyjściowych
Zastosowanie silnika reguł biznesowych umożliwiło nam wydzielenie algorytmów obliczeniowych, decyzyjnych oraz stawek prowizyjnych i progów liczbowych do osobnego rozwiązania, które pozwala na ich modyfikację z poziomu projektanta graficznego. W samej aplikacji stworzyliśmy fasadę odpowiedzialną za komunikację z tym silnikiem.

Wszelkie zmiany w wydzielonym obszarze były wykonywane poza aplikacją końcową, czasem nawet bezpośrednio na środowisku u klienta.

Nowe parametry algorytmu już istniejące w systemie końcowym
Wykorzystany system reguł biznesowych można odpytać nie tylko o zestaw danych wejściowych i wyjściowych konkretnego algorytmu, ale również o wygląd połączonego modelu danych, wykorzystywanego przez wszystkie dostępne algorytmy. Dzięki temu mogliśmy stworzyć w aplikacji jeden punkt, w którym przy wywołaniu dowolnego algorytmu system był w stanie, za pomocą skonfigurowanych mapowań, automatycznie pobrać dane z bazy danych i przetworzyć je w zestaw potrzebny do konkretnych obliczeń. Analogicznie, system może automatycznie zapisać wynik obliczeń do bazy danych.

Jeśli po wprowadzeniu zmian w algorytmie pojawia się potrzeba dostarczenia nowego parametru, który już był wykorzystywany w systemie i zmapowany (np. na potrzeby innego algorytmu) system sam dba o to, aby dostarczyć go do nowej wersji algorytmu.

Wyciągnięcie konfiguracji mapowań z kodu do xml, który jest ładowany do aplikacji  przy starcie systemu, pozwala na dodawanie nowych mapowań, bez konieczności modyfikacji kodu.

Nowe parametry algorytmu wykorzystywane tylko do obliczeń
Na formularzach, służących do wprowadzania danych do algorytmów przez użytkownika, umieściliśmy dynamiczne podformularze, które budują dynamicznie zestaw kontrolek, niezbędnych do wykonania algorytmu, na podstawie definicji danych uzyskanych z silnika obliczeniowego. Dzięki temu, po dodaniu, nowe pole pojawia się automatycznie na formularzu.

Dane wprowadzone przez użytkownika muszą być zapisane do bazy danych. Tradycyjnie dodając nowe pole, powinniśmy dodać nową kolumnę – co wymaga już modyfikacji systemu, czego chcieliśmy uniknąć. Rozwiązaliśmy to w następujący sposób: ponieważ zazwyczaj pola, które są najczęściej wykorzystywane (filtry, kolumny w listach, itp.) rzadko się zmieniają, więc umieściliśmy je w statycznych kolumnach bazy danych, pozostałe dane zaś są przechowywane w jednym polu w postaci xml. Nowe pole może zostać zapisane w bazie bez konieczności modyfikacji.

Teoretycznie można powiedzieć, że rozwiązany został w ten sposób problem modyfikacji systemu informatycznego. Niestety, w praktyce jest jedno ograniczenie – operacje w bazie danych na polach typu xml są niestety powolne. Jeśli pole jest intensywnie wykorzystywane (np. w widokach tabelarycznych, zawężeniach „WHERE”), nie możemy sobie pozwolić na ten scenariusz. Z tego powodu trzeba rozważać również scenariusz opisany poniżej.

Nowe parametry algorytmu wykorzystywane szeroko w systemie końcowym
Jeśli dochodzi nowe pole i jest ono często wykorzystywane w różnych częściach systemu, pojawia się potrzeba dodania nowego pola w bazie i oprogramowania, czyli tradycyjnej zmiany, w systemie informatycznym.

Pocieszające jest to, że pierwsze trzy przypadki zdecydowaną większość sytuacji, w której zmienia się algorytm. Dużo rzadziej zmienia się domena danych niż logika podejmowania decyzji czy zmiany w np. stawkach prowizyjnych.

Powrót

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>