W jaki sposób użycie silnika reguł wpływa na projekt, implementację i działanie aplikacji?


11

Interesuje mnie zdolność silników reguł do:

  • wprowadzać i powtarzać logikę biznesową
  • zlecić „użytkownikom biznesowym” dokonanie rzeczywistej modyfikacji tych reguł, a nie programistów
  • zrozumieć zasady biznesowe w ogólności

Czy użycie silnika reguł wpływa również na jakość aplikacji?

Czy użycie silnika reguł zmienia się, jeśli wdrażasz konfigurację z 1 komputerem w porównaniu do architektury w porównaniu z architekturą rozproszoną opartą na chmurze wielowarstwowej na tysiącach komputerów? Jak by to było inaczej?

Odpowiedzi:


5

Decyzja, czy udostępnić interfejs nietechnicznego personelu do modyfikowania reguł biznesowych, zależy w dużej mierze od kilku czynników, w tym celów projektu, kosztu projektu, czasu jego trwania oraz stosunku znanych do nieznanych w projekt.

Na przykład, jeśli uważam, że nikt nie użyje interfejsu reguł, prawdopodobnie zrezygnowałbym z jego implementacji. Gdybym jednak miał powód, by sądzić, że zmiany będą częste i że różni użytkownicy końcowi oczekiwaliby, że będą obowiązywać inne reguły, to rozważę pracę nad budowaniem takiej funkcjonalności.

Postanowiłem to zrobić w ramach projektu i minęło wiele lat, zanim ta funkcja była powszechnie używana. Podejrzewałem, że w końcu będziemy mieć użytkowników końcowych, którzy sami chcieliby dostosować rzeczy, dlatego zaimplementowaliśmy tę funkcjonalność w częściach.

Zaczęło się jako coś, z czego mogli korzystać tylko niektórzy ludzie, np. Programiści lub administratorzy. Interfejs był niezgrabny, ale użyteczny, jeśli wiesz, co robisz. Ale zanim produkt był prawie gotowy, logika zaplecza silnika reguł przydała się, a nasz zespół projektowy dał mu piękny interfejs użytkownika zorientowany na klienta.

Gdybym miał to zrobić inaczej, mógłbym wybrać inną architekturę bazy danych tylko dlatego, że krzywa uczenia się jest wysoka. Krótko mówiąc, wczesne zbudowanie go doprowadziło do wielu późniejszych funkcji skierowanych do klienta, bez konieczności wracania do kodu i zmiany go tak, aby zawierał wszystkie reguły dynamiczne.


1
Dodam, że użytkownicy biznesowi powinni oczekiwać czasu na naukę interfejsu reguł. Interfejs będzie łatwiejszy w użyciu dla użytkowników, ale na pewno zajmie to trochę czasu i wysiłku. Nie powinni oczekiwać czegoś magicznie zrozumiałego.
9000

@ 9000 - Bardzo dobry punkt. Widziałem to w moich własnych projektach. W rzeczywistości często wiąże się to ze szkoleniem w celu przyspieszenia działania użytkowników, a także pewnym aspektem „sprzedaży” interfejsów użytkownikom i pokazywania im wartości, jaką ma dla nich.
jmort253

4

Gdybym to zrobił, stworzyłbym język specyficzny dla domeny, aby wyrazić reguły, i może dać biz typom interfejs do modyfikowania go, jeśli zostanie o to poproszony. Następnie użyj funkcjonalnego języka (takiego jak Haskell, Lisp lub Erlang), aby ocenić reguły.

Gdyby wymagany był masywny paralelizm, wybrałbym Erlanga, który bardzo dobrze radzi sobie z współbieżnością. Użycie Erlanga dobrze skalowałoby od 1 węzła do 100 lub więcej.

Jeśli myślisz o regułach jako o algebrze, która zostanie zastosowana do zbioru danych, łatwiej jest wylogować, co jest potrzebne w twoim kodzie i udowodnić sobie (lub menedżerom), że jest poprawne. To jedno z tych miejsc, w których funkcjonalny język będzie działał na twoją korzyść.


3

Napisałem aplikację opartą na WF (Windows Workflow Foundation). Mój szef (DBA) był przekonany, że WF może wykonywać wielowątkowość bez potrzeby planowania współbieżności. Pamięć została dokładnie podzielona, ​​ale było tak wiele problemów, że nie potrafię jej wyjaśnić w kilku akapitach i tylko w niewielkim stopniu dotyczy twojego pytania ... więc kontynuuję.

Możliwość iteracji BL:
WF robi to dobrze.
zezwól nietechnicznym na „zbudowanie aplikacji”:
WF robi to dobrze JEŚLI architektura działa ORAZ nietechniki rozumieją ograniczenia techniczne ... Nasze nie.
Zdolność do zrozumienia reguł biznesowych w ogólności:
Istnieje kilka dodatków, które mogą wykonywać podstawowe czynności, podobnie jak SharePoint może automatyzować przepływy pracy. Nie dostałem się do tych przedmiotów.
Jakość sprzedaży oprogramowania:
mierna. WF nie działał dobrze dla naszych celów, ale system był źle zaprojektowany i moje ręce były związane.
Szybkość aplikacji:
Powolny. Krzywa uczenia się jest dość stroma zarówno dla programistów, jak i użytkowników końcowych. Sposób, w jaki WF oddzieliła pamięć (domeny aplikacji, o ile pamiętam) sprawił, że komunikacja między wątkami, muteksy i inne koncepcje wątków stały się niewyraźne lub po prostu nie działały.

Ostatecznie napisałem prototyp, aby udowodnić, że WF zawodzi w sposobie jego wdrożenia. Zastąpiłem go wspólnym wielowątkowością. Zwiększono wydajność i czytelność kodu. Weź to z odrobiną soli, ponieważ była to moja pierwsza profesjonalna aplikacja do WF.

Nontechs mogą uwierzyć, że praktycznie wszystko jest możliwe bez konieczności programowania, potencjalnie duży negatyw dla całego „manekina” BL; związane z tym problemy socjologiczne zabiły projekt.

Gdybym mógł wrócić i zrobić to po swojemu : użyj tradycyjnego gwintowania i listwy BL uzyskanej dzięki Decorator Pattern. Napisałem dowód koncepcji, który wykorzystywał te technologie i działał dobrze. ORAZ mapowanie BL powinno być zawinięte w PROSTY interfejs użytkownika.
Aktualizacja
Znalazłem stary post, który napisałem podczas rozwiązywania problemów z współbieżnością. Kod pokazuje, w jaki sposób drukowanie „Witaj świecie” w równoległych przepływach pracy nie działa bez zrozumienia tego, co dzieje się pod okładkami (co przeczy całemu celowi abstrakcji WF). Moderator MSDN wyjaśnia ogólny przegląd tego, jak równoległe działania są naprawdę sekwencyjne. Kończy on w zasadzie „musisz przeczytać całą instrukcję”, aby zrobić coś tak podstawowego. http://social.msdn.microsoft.com/Forums/en/windowsworkflowfoundation/thread/8a1fa165-ad5c-4cd2-b489-7ea5fc31fed8

Powodzenia.


Mam żadnego doświadczenia z WF, ale zawsze z dala od niego, bo mój instynkt było to zrobić. Ale nie mogę przestać się zastanawiać, czy WinWF nie jest tylko opóźnioną wersją systemu ETL, takiego jak Rhino ETL, pod względem tego, co można zrobić z tą samą łatwością?
Henrik

3

Mam niezbyt doskonałe doświadczenie w łączeniu kodu Java z silnikiem reguł Oracle. Niektóre z nich mogą wynikać z braku doświadczenia autorów reguł, ale właśnie z tym się spotkałem.

  • Wdrożyliśmy nasz silnik reguł jako urządzenie bezstanowe. Dzwoniący musiał zebrać wszystkie parametry i przekazać je do silnika w celu oceny. Oznaczało to, że jeśli reguła wymagała innego pola danych, wszyscy klienci musieliby zostać zaktualizowani, co negowało reklamowaną zaletę możliwości aktualizacji reguł niezależnie od ich konsumentów.
  • Silnik opublikował SODL WSDL, ale został wygenerowany automatycznie z zestawu reguł. Niewielkie zmiany zasad spowodowałyby zerwanie umowy z konsumentami.
  • Silnik był dobry w ocenie zasad, ale strasznie mówił nam, dlaczego ocena się nie udała. Trudno było przekazać użytkownikowi informacje o błędach.
  • WSDL nie nadawał się do ogólnego spożycia. Najprostszy zestaw reguł miał 14-stronicowy kod WSDL, który odsłonił elementy wewnętrzne podstawy reguł. Musieliśmy umieścić warstwę tłumaczenia SOA z przodu, aby zaprezentować fasadę przyjazną dla biznesu. Zamiast więc wywoływać w 100% niezawodną bibliotekę lokalną, w pętli były dwa dodatkowe serwery. To wcale nie zwiększa niezawodności. Plus każda zmiana podpisu reguły dotyczyła trzech różnych zespołów aktualizujących kod. Nie moja definicja zwinności!
  • Za każdym razem, gdy zestaw reguł wymaga dodatków, WSDL będzie musiał zostać zaktualizowany, co oznacza, że ​​klienci go nie rozumieją. Doprowadziło to do dodania nowych punktów końcowych SOAP dla v2, v3 .., które wywoływały efekt domina wymagający aktualizacji reguł zapory.
  • Reguły zostały wyrażone w „uporządkowanym angielskim”, co było zrozumiałe dla prostych reguł, ale prawie nieprzezroczyste dla złożonych reguł.
  • Nigdy nie mogliśmy znaleźć kontrahentów, którzy znają język autorski.
  • Język reguł nie implementował tablic, rekurencji ani orientacji obiektowej. W jednym przypadku jedynym sposobem na implementację reguły było objaśnienie do arkusza kalkulacyjnego Excel, gdzie reguła została zaimplementowana w VB. Po co się męczyć?

Nie sądzę, aby wybór użycia silnika reguł (lub nie) był jednoznaczny. Proponuję wykonać prototyp dowolnego silnika, którego zamierzasz użyć, a następnie podjąć świadomą decyzję. Z pewnością nie są srebrną kulą ...

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.