Місце, над яким я працюю, намагається встановити деякі основні правила, і дебати, які ми зараз маємо, - це місцеві бібліотеки проти веб-служб для повторного використання коду. Веб-сервіси, здається, є популярним у більшості компаній, і саме до цього схиляється більшість розробників.
Я просто не бачу, як можна ефективно використовувати веб-сервіси для будь-якої серйозної роботи. Як я можу безпечно виконувати декілька службових дзвінків, якщо не можу використовувати транзакцію?
Скажімо, у мене є робота з крон, яка захоплює клієнтів з нашої бази даних, які відповідають певній умові, про яку їм потрібно повідомити. Їм надсилається факс, електронний лист та квиток, щоб відстежувати проблему всередині країни. Це 3 різні виклики служби, які відбудуться для кожного клієнта в циклі "for".
Якщо в будь-якому місці помилки трапляється десь, можливо, наприклад, факс та електронний лист надсилаються замовнику, але квиток не створюється. Або ще гірше, що ця робота з Cron може містити помилку, яка спричиняє невдачу кожного разу в одній точці, і вона неодноразово надсилає електронній пошті того ж клієнта. Якби всі бібліотеки були локальними, все можна було б просто загорнути в транзакцію, і нічого з цього не відбудеться. Але ми використовуємо веб-сервіси в цьому прикладі.
Зауважте, що методи електронної пошти та факсу фактично вставляють дані в таблиці, що підтримуються базами даних, які, в свою чергу, обробляються окремим процесом завдання Cron. Таким чином, дзвінки на послуги "надіслати електронну пошту" та "надіслати факс" можуть бути скасовані побічними ефектами, якщо це необхідно.
Опція полягає в тому, щоб весь цей фрагмент коду було розміщено в самій веб-службі, щоб веб-служба сама зателефонувала на електронну пошту, факс та методи створення квитків в транзакції. Але тоді ми створюємо метод веб-сервісу саме для використання транзакції; немає поважних причин, коли б нам насправді потрібно було викликати цей метод з будь-якого місця, крім цього одного сценарію cron.
Як би ви взагалі впоралися з цим методом?