Як використання двигуна правил впливає на розробку, реалізацію та ефективність програми?


11

Мене цікавить здатність двигунів правил:

  • запуск і ітерація над логікою, керованою бізнесом
  • змусити "ділових користувачів" здійснювати фактичну модифікацію цих правил, а не розробники
  • осмислити правила бізнесу в цілому

Також, чи впливає використання двигуна правил на якість програми?

Чи змінюється використання двигуна правил, якщо ви розгорталися в налаштуваннях 1 машини на вашу архітектуру порівняно з багатоярусною хмарною розподіленою архітектурою, використовуючи тисячі машин? Як би це було інакше?

Відповіді:


5

Рішення про те, чи потрібно виставляти інтерфейс для нетехнічного персоналу для зміни правил бізнесу, багато в чому залежить від декількох факторів, включаючи цілі проекту, вартість проекту, термін експлуатації та співвідношення знань до невідомих в проект.

Наприклад, якби я вважав, що ніхто не буде використовувати інтерфейс правил, я б, мабуть, відмовився від його реалізації. Однак, якби я мав підстави вважати, що зміни будуть часті і що різні кінцеві користувачі очікують, що будуть застосовані різні правила, то я б розглядав можливість роботи над побудовою такої функціональності.

Я вирішив зробити це над проектом, і пройшло багато років, перш ніж ця функція була широко використана. Я підозрював, що в кінцевому підсумку у нас з’являться кінцеві користувачі, які хочуть самі налаштувати речі, тому ми реалізували цю функціональність на частини.

Він починався як щось, що можуть використовувати лише певні люди, такі як розробники чи адміністратори. Інтерфейс був незграбний, але корисний, якщо ви знали, що робите. Але до того часу, коли продукт наближався до завершення, логіка правил роботи двигуна з правилами стала корисною, і наша команда дизайнерів надала йому прекрасний, орієнтований на клієнтів інтерфейс користувача.

Якби я робив це по-іншому, я міг би вибрати іншу архітектуру баз даних тільки тому, що крива навчання висока. Але коротше кажучи, побудова цього на ранньому етапі призвела до того, що згодом багато функцій, що стоять перед клієнтом, без головних болів повертаються до коду і рефактор, щоб включати всі динамічні правила.


1
Додам, що ділові користувачі повинні сподіватися витратити час на вивчення інтерфейсу правил. Користувачам інтерфейс буде простішим у використанні, але для його вивчення обов'язково знадобиться час і сили. Вони не повинні сподіватися на щось магічно зрозуміле.
9000

@ 9000 - Дуже хороший момент. Я бачив це у власних проектах. Насправді, це часто все ще включає навчання, щоб довести користувачів до швидкості, а також певний аспект «продажу» інтерфейсу користувачам та показувати їм значення, яке він має для них.
jmort253

4

Якби я це зробив, я створив би специфічну для домену мову, щоб висловити правила, і, можливо, надав інтерфейсам біз-типів, щоб змінити його за потреби. Потім використовуйте функціональну мову (наприклад, Haskell, Lisp або Erlang) для оцінки правил.

Якщо потрібен масований паралелізм, я б поїхав з Ерланг, який дуже добре погоджується. Використання Erlang може масштабувати від 1 вузла до 100 або більше.

Якщо ви думаєте про правила як про алгебру, яка буде застосована до набору даних, стає набагато простіше виправити те, що потрібно у вашому коді, і довести собі (або вашим менеджерам), що це правильно. Це одне з тих місць, де функціональна мова працюватиме на вашу користь.


3

Я написав заявку на основі WF (Windows Workflow Foundation). Мій бос (DBA) був переконаний, що WF може виконувати багатопотоковість, не потребуючи планування одночасності. Пам'ять була розділена ретельно, але було так багато проблем, що я не можу пояснити це лише кількома абзацами, і це лише трохи пов'язане з вашим запитанням ... тому я продовжую.

Можливість повторити BL:
WF робить це добре.
дозволити нетехнологіям "створювати додаток":
WF робить це добре, якщо архітектура працює І нетехнології розуміють технічні обмеження ... Наші цього не зробили.
Можливість розуміння бізнес-правил в цілому:
Є деякі доповнення, які можуть виконувати основні речі, подібні до того, як sharepoint може автоматизувати робочі процеси. Я не потрапляв у ці предмети.
Якість програмного забезпечення реалізується:
посереднє. WF не працював добре для наших цілей, але система була погано спроектована, і мої руки були пов'язані.
Швидкість застосування:
Повільно. Крива навчання досить крута як для розробників, так і для кінцевих користувачів. Те, як відокремлена WF-пам’ять (домени додатків, якщо я згадую), зробила перехресну комунікацію, мютекси та інші поняття про нарізку безглузді або просто взагалі не працювали.

Врешті-решт, я написав прототип, щоб довести, що WF виходить з ладу в тому, як він був реалізований. Я замінив її звичайною багатопотоковою різьбою. Продуктивність та читабельність коду зросли. Візьміть це з зерном солі, так як це було моє перше професійне застосування WF.

Нетехнологи можуть вважати, що практично все можливе, якщо програміст не потрібен - це потенційно великий негатив для всієї "манекени" БЛ; Соціологічні проблеми, пов'язані з цим, вбили проект.

Якщо я міг би повернутися назад і зробити це по- своєму : використовуйте традиційну нарізку різьби та ліплення BL, досягнуте за допомогою Decorator Pattern. Я написав доказ концепції, яка використовувала ці технології, і вона добре працювала. І відображення BL повинно бути загорнене у ПРОСТИЙ інтерфейс користувача.
Оновлення
Я знайшов старе повідомлення, яке я написав, коли працював із проблемами одночасності. Код показує, як друк "привіт світу" при паралельних робочих процесах не працює без розуміння того, що відбувається під кришками (що перемагає цілі абстракції WF). Модератор MSDN пояснює огляд високого рівня того, як паралельні дії дійсно є послідовними. Він закінчує, в основному, "вам потрібно прочитати весь посібник", щоб зробити щось таке основне. http://social.msdn.microsoft.com/Forums/en/windowsworkflowfoundation/thread/8a1fa165-ad5c-4cd2-b489-7ea5fc31fed8

Удачі.


Я не маю досвіду роботи з WF, але завжди тримався осторонь цього, тому що мій інстинкт кишки мав це робити. Але я не можу не задатися питанням, якщо WinWF - це не просто відстала версія ETL-системи, наприклад, Rhino ETL, з точки зору того, що можна зробити з нею так само легко?
Генрік

3

У мене був менш ніж досконалий досвід підключення коду Java до системи управління Oracle. Дещо з цього може бути через недосвідченість авторів правил, але з цим я зіткнувся.

  • Ми реалізували нашу систему двигунів як пристрій без стану. Абонент повинен був зібрати всі параметри та передати їх двигуну для оцінки. Це означало, що якщо правилу потрібне інше поле даних, усі клієнти потребують оновлення. Це заперечувало рекламоване перевагу можливості оновити правила незалежно від своїх споживачів.
  • Двигун опублікував SOAP WSDL, але він автоматично генерувався з набору правил. Незначні зміни правил порушили б договір зі споживачами.
  • Двигун добре оцінював правила, але жахливо говорив нам, чому оцінка не вдалася. Було важко повернути користувачеві інформаційні повідомлення про помилки.
  • WSDL не був придатний для загального споживання. Найпростіший набір правил мав 14 сторінок WSDL, який розкривав внутрішню базу правил. Нам довелося поставити шар перекладу SOA перед тим, щоб представити зручний для бізнесу фасад. Тож замість виклику 100% надійної локальної бібліотеки у циклі було два додаткових сервери. Це щонайменше не додає надійності. Плюс будь-яка зміна підпису правила передбачала три різні команди, що оновлювали код. Не моє визначення спритного!
  • Щоразу, коли для набору правил потрібні доповнення, WSDL доведеться оновлювати, а це означає, що клієнти вже не розуміють цього. Це призводить до додавання нових кінцевих точок SOAP для v2, v3 .., які мали стукачі ефекти необхідності оновлення правил брандмауера.
  • Правила були висловлені в "структурованій англійській мові", що було легко зрозумілим для простих правил, але майже непрозорим для складних правил.
  • Ми ніколи не могли знайти підрядників, які б знали правила авторської мови.
  • Мова правил не реалізує масиви, рекурсію та орієнтацію на об'єкти. В одному випадку єдиним способом реалізації правила було за допомогою опису до таблиці Excel, де правило було реалізовано в VB. Навіщо турбуватися?

Я не думаю, що вибір використання механізму правил (чи ні) є чітким. Я пропоную вам прообразувати будь-який двигун, який ви збираєтесь використовувати, а потім прийміть обгрунтоване рішення. Вони, звичайно, не срібна куля ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.