Wykład 3
Transkrypt
Wykład 3
Informatyzacja przedsiębiorstw WYKŁAD dr inż. Piotr Zabawa IBM/Rational Certified Consultant [email protected] wersja 0.1.0 07.10.2010 Wykład 3 Modelowanie procesów biznesowych z wykorzystaniem BPMN w środowisku Jboss Drools Przykłady reguł biznesowych Zostaną tutaj zaprezentowane niewielkie, ale za to posiadające namacalną postać (działające oprogramowanie), przykłady prostych reguł biznesowych o różnych zastosowaniach: • Walidacja danych • Transformacja danych • Monitorowanie danych – uzupełnić i dodać eventy Na tle tych przykładów zaprezentowany zostanie podstawowy sposób pracy nad developmentem reguł biznesowych polegający na ich unit-testowaniu. Przykład reguł biznesowych Kontekst biznesowy zostanie dokładniej opisany przy każdej regule. Tutaj podany zostanie fragment analitycznego dziedzinowego modelu (Domain-Specific Model) biznesowego dla bankowości. Źródło przykładów Przykłady te zostały zaczerpnięte z literatury: • Bali M., Drools JBoss Rules 5.0. Developers Guide, Packt Publishing 2009. • Kod źródłowy przykładów dostępny jest ze strony wydawnictwa: https://www.packtpub.com/support?nid=4009 • Aktualna wersja przykładu znajdująca się pod kontrolą wersji dostępna jest spod: uzupełnić !!! Jest to rozwiązanie tymczasowe – znacznie uproszczony przykład zostanie udostępniony wkrótce. Język reguł biznesowych - walidacja Reguły tej kategorii mogą służyć do weryfikacji poprawności, spójności lub kompletności danych wymaganych na danym etapie procesu biznesowego. Przykładem takich reguł jest walidacja danych klienta zgłaszającego przez aplikację internetową podanie o założenie rachunku bankowego. Aby klient został zapisany w bazie danych systemu bankowego musi np. określić swoje dane kontaktowe (adres e-mail). Jednak nie musi od razu podawać swoich wszystkich danych – może je uzupełnić w czasie kolejnej sesji z systemem bankowym. Powinien zostać powiadomiony od razu o konieczności uzupełnienia tych danych. Język reguł biznesowych - walidacja • Wymagane jest podanie adresu przez nowego klienta – w przeciwnym razie ostrzeżenie rule „addressRequired” when Customer ( address == null ) then warning(kcontext); end Język reguł biznesowych - walidacja • Wymagane jest podanie adresu przez nowego klienta – w przeciwnym razie błąd rule „studentAccountCustomerAgeLessThan” when Customer ( eval (yearsPassedSince(dateOfBirth) >= 27) ) $account : Account ( type == Account.Type.STUDENT) then error(kcontext, $account); end Język reguł biznesowych - walidacja Implementacja i testy JUnit4 w projektach Drools Eclipse. ValidationSample Język reguł biznesowych transformacja Reguły takie mogą zostać wykorzystane do konwersji danych pomiędzy dwoma systemami korporacyjnymi, np. bankowymi. Może to być konwersja związana z przenoszeniem danych ze starego systemu do nowego. Dzięki zastosowaniu reguł biznesowych możemy się skupić na tym co a nie jak należy konwertować. Unikamy konieczności sięgania do wewnętrznych struktur baz danych (dla różnych wersji systemu te struktury mogą się znacząco różnić). Jest to możliwe dzięki korzystaniu tylko z interfejsów programowych (API) wspomnianych systemów. Reguły można zastosować do konwersji tak uzyskanych danych towarzyszącej ich przenoszeniu. Język reguł biznesowych transformacja Przykładem takiej sytuacji jest wymóg aby przejściu ze starego systemu do nowego towarzyszyła zamiana wielu kont każdego z klientów na jedno konto, na którym docelowo można otwierać wiele rachunków. Zastosowanie reguł biznesowych nie jest zapewne najefektywniejszym z możliwych podejść. Jednak ze względu na łatwość jego realizacji może się okazać konkurencyjne w stosunku do efektywnego (ale tylko w czasie wykonania – pomijalnym w stosunku do czasu implementacji) podejścia polegającego na pisaniu skomplikowanych zapytań SQL do baz danych o różnych strukturach z jednoczesną konwersją i skomplikowanym przeliczaniem danych. Język reguł biznesowych transformacja • Wymagana jest redukcja wielu rachunków klienta do jednego rachunku rule „reduceLegacyAccounts” when $accountMap1 : Map( this[„_type_”] == „Account” ) $accountMap2 : Map( this[„_type_”] == „Account”, eval ( $accountMap1 != $accountMap2), this[„customer_id”] == $accountMap1[„customer_id”], this[„currency”] == $accountMap1[„currency”] ) then modify($accountMap1){ put(„balance”, ( (BigDecimal)$accountMap1.get(„balance”)).add( (BigDecimal)$accountMap2.get(„balance”)) ) } retract( $accountMap2 ); end Język reguł biznesowych transformacja Implementacja i testy JUnit4 w projektach Drools Eclipse. TransformationSample