Istnieje wiele czynników, które wpływają na decyzję o utworzeniu warstwy usług. W przeszłości tworzyłem warstwy usług z następujących powodów.
- Kod, który musi być ponownie użyty przez wielu klientów.
- Biblioteki stron trzecich, na które mamy ograniczone licencje.
- Strony trzecie, które potrzebują punktu integracji z naszym systemem.
- Centralizacja zduplikowanej logiki biznesowej.
Przypadek 1: Tworzysz podstawową funkcjonalność, z której musi korzystać mnóstwo różnych klientów. Warstwa usług ma wbudowaną funkcjonalność dla różnych klientów, dzięki której możesz natychmiast skorzystać z dostarczonej funkcjonalności.
Przypadek 2: zwykle przechowujesz kod w przestrzeni aplikacji, ale korzystasz z biblioteki innej firmy, na którą masz ograniczone licencje. W takim przypadku masz zasób, z którego chciałbyś korzystać wszędzie, ale tylko ograniczoną liczbę z nich. Jeśli hostujesz go za usługą, cała Twoja organizacja może korzystać z niego ze swoich aplikacji bez konieczności kupowania licencji dla każdego hostingu.
Przypadek 3: Budujesz funkcjonalność, aby osoby trzecie mogły się z Tobą komunikować. W twoim przykładzie możesz skonfigurować punkt końcowy zapasów, aby umożliwić dostawcom przekazywanie wiadomości o przychodzących wysyłkach produktów.
Przypadek 4: Przeanalizowałeś swój kod w całym przedsiębiorstwie i odkryłeś, że oddzielne zespoły stworzyły to samo (tylko nieco inaczej wdrożone). Dzięki warstwie usług możesz wybrać najlepsze podejście, a teraz możesz wdrożyć ten sam proces we wszystkich zespołach, każąc im zadzwonić do serwisu. Kolejną korzyścią z centralizacji logiki jest znalezienie błędów. Teraz możesz wdrożyć poprawkę raz, a wszyscy klienci korzystają z korzyści w tym samym czasie.
Biorąc to wszystko pod uwagę, istnieją potencjalne negatywy dla warstwy usług.
- Dodaje złożoność systemu. Gdzie wcześniej miałeś tylko jedną aplikację do debugowania, teraz masz dwie. Problemy z produkcją wymagają sprawdzenia ustawień aplikacji klienckiej, ustawień aplikacji usługowych lub problemów z komunikacją między innymi poprawnie skonfigurowanymi aplikacjami klienckimi i serwerowymi. Może to być trudne, jeśli nigdy wcześniej tego nie robiłeś.
- Jeden punkt awarii. Jeśli wystąpi awaria usługi, dotyczy to wszystkich klientów. Gdy kod nie jest wdrażany w ten sposób, ryzyko może być mniejsze (choć istnieją sposoby na złagodzenie tego).
- Wersjonowanie może być trudniejsze. Jeśli masz jedną aplikację korzystającą z usługi wdrażającej interfejs, zmiany można wprowadzić w tym samym czasie między nimi. Jeśli masz teraz wielu klientów, musisz zarządzać, kto jest na V1, a kto na V2, i koordynować usuwanie V1 (gdy wiesz, że wszyscy zaktualizowali się do V2).
Chodzi przede wszystkim o to, że nie zawsze jest to szybkie, aby zorientować usługę na system. Z mojego doświadczenia wynika, że zazwyczaj jest to dobry pomysł (zazwyczaj tworzę aplikacje w taki sposób), ale nie jest to automatyczna decyzja. Na koniec dnia musisz rozważyć zalety i wady i podjąć decyzję odpowiednią dla Twojej sytuacji.