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.
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ść.
źródło
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.
źródło
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.
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ą ...
źródło