Miejsce, w którym pracuję, stara się ustalić pewne podstawowe zasady, a debata, którą teraz toczymy, dotyczy bibliotek lokalnych a usług sieciowych do ponownego wykorzystania kodu. Usługi sieciowe wydają się być popularnym wyborem w większości firm i właśnie do tego dąży większość programistów.
Po prostu nie widzę, jak możesz skutecznie korzystać z usług sieciowych do jakiejkolwiek poważnej pracy. Jak mogę bezpiecznie wykonywać wiele zgłoszeń serwisowych, jeśli nie mogę skorzystać z transakcji?
Powiedzmy, że mam zadanie crona, które pobiera klientów z naszej bazy danych, którzy spełniają określony warunek, o którym muszą zostać powiadomieni. Otrzymują oni faks, e-mail i tworzony jest bilet umożliwiający wewnętrzne śledzenie problemu. To 3 różne wezwania serwisowe, które miałyby miejsce dla każdego klienta w pętli for.
Jeśli w dowolnym miejscu występuje błąd, możliwe jest, że na przykład faks i wiadomość e-mail są wysyłane do klienta, ale bilet nie jest tworzony. Albo, co gorsza, to zadanie crona może zawierać błąd, który powoduje, że kończy się niepowodzeniem w tym samym momencie za każdym razem i wielokrotnie wysyła e-maile do tego samego klienta. Gdyby wszystkie biblioteki były lokalne, wszystko mogłoby być po prostu zawinięte w transakcję i nic z tego by się nie wydarzyło. Ale w tym przykładzie korzystamy z usług internetowych.
Zauważ, że metody e-mail i faks faktycznie wstawiają dane do tabel kolejek zabezpieczonych bazą danych, które z kolei są obsługiwane przez osobny proces zadania cron. Tak więc połączenia z metodami „wyślij e-mail” i „wyślij faks” mogą być w razie potrzeby przerwane bez skutków ubocznych.
Opcją jest umieszczenie całego fragmentu kodu w samej usłudze sieciowej, aby sama usługa wywoływała metody tworzenia wiadomości e-mail, faksu i biletów w transakcji. Ale potem tworzymy metodę usługi internetowej tylko na potrzeby transakcji; nie ma żadnego ważnego powodu, aby kiedykolwiek musielibyśmy wywoływać tę metodę z dowolnego miejsca, z wyjątkiem skryptu z jednym cronem.
Jak ogólnie poradziłbyś sobie z tą metodą?