Czy w Magento 2 jest konkretny przykład czegoś, co zostało zbudowane przy użyciu koncepcji umowy serwisowej ? Często widywałem ten termin, ale patrząc na Magento 2 w obecnej postaci, nie jest dla mnie jasne, czy umowy serwisowe są bardziej przewodnimi zasadami, czy też faktycznie wiążą się z konkretnymi implementacjami rzeczy w Magento 2.
magento2
service-contract
Alan Storm
źródło
źródło
Odpowiedzi:
Jak rozumiem, wszystkie interfejsy zdefiniowane w folderze API są umowami serwisowymi. Zatem wszędzie tam, gdzie używany jest interfejs zamiast faktycznej implementacji klasy, korzysta on z umowy serwisowej.
Przykładem może być ta implementacja wtyczki tutaj https://github.com/magento/magento2/blob/2.3.2/app/code/Magento/GiftMessage/Model/Plugin/OrderGet.php#L78
To używa
zamiast
\Magento\Sales\Model\Order
źródło
Usługi (zwane również umowami serwisowymi) są jednym z naszych głównych wzorców rozwoju w Magento 2, aby zapewnić stabilne interfejsy dla łatwej personalizacji / rozbudowy. Przyjmują 2 formy w bazie kodu (oba są opatrzone adnotacjami
@api
w klasie lub metodach klasy w celu zidentyfikowania ich jako stabilnych interfejsów, które można dostosować i / lub ujawnić jako interfejs API sieci Web): API lub SPI. Interfejsy API są zdefiniowane w folderze API i przyjmują dwie formy - w pełni przebudowaną usługę i tylko moduł tylko API.W pełni refaktoryzowane usługi znajdują odzwierciedlenie w modułach Klient, Zapasy, Podatek i Kwota * (Klient jest usługą do emulacji, Kwota ma jeszcze obszary, które wymagają refaktoryzacji). Moduł tylko API można zobaczyć w Katalogu, Sprzedaży i CMS. W przypadku w pełni zreformowanych usług wystarczy wykonać wtyczkę do metody usługi, aby wpłynąć zarówno na api internetowe, jak i na GUI. W przypadku modułów tylko API musisz podłączyć metodę usługi, aby wpływać na api internetowe, ale nadal będziesz musiał dokonać 1x dostosowań stylu, aby wpłynąć na GUI.
Interfejsy SPI to w zasadzie interfejsy w kodzie opatrzone adnotacjami,
@api
które są zamierzonymi miejscami, które strony trzecie wdrożyłyby, aby zapewnić pewne funkcje biznesowe. Przykład SPI (CarrierInterface
) zdefiniowanej w module wysyłkowym, który zaimplementujesz w module wysyłkowym (tj. Ups).Struktura usług zapewnia szereg interesujących korzyści. Łatwa ekspozycja jako interfejs WWW (i nadchodzące po 2.0 za pośrednictwem kolejek wiadomości) vi
webapi.xml
konfiguracja (w stylu SOAP i REST). W najbliższym czasie (post 2.0) dodamy wywołania API (połączenia synchroniczne lub Webhooki, jeśli skonfigurowano je do uruchamiania asynchronizacji, wysyłania wiadomości), którymi można zarządzać / ujawniać je poprzez konfigurację. Bezpieczniejsza instalacja / aktualizacje - możesz programowo zidentyfikować problematyczne sytuacje (2 lub więcej rozszerzeń implementujących ten sam interfejs). Usprawnione dostosowywanie, które wpływa zarówno na interfejs API, jak i interfejs GUI, ponieważ istnieje tylko jedna metoda / usługa do dostosowania (w przypadku w pełni zreformowanego modułu lub nowych modułów / usług stworzonych przez społeczność).źródło
Sprawdź zastosowania tych metod:
\Magento\Customer\Api\AccountManagementInterface::createAccount
\Magento\Customer\Api\CustomerRepositoryInterface::getById
źródło
Umowy serwisowe Magento
Zasadniczo umowy serwisowe są tylko zestawem interfejsów i klas, które chronią integralność danych i ukrywają logikę biznesową. Powodem, dla którego klienci będą chcieli to wykorzystać, jest fakt, że umowa pozwala na rozwój usługi bez wpływu na jej użytkowników.
Uaktualnienie to jest ważne, ponieważ zmienia sposób interakcji użytkowników z różnymi modułami. W Magento 1 nie było dobrych sposobów interakcji z innymi modułami. Dzięki umowom serwisowym w Magento 2 możesz łatwo uzyskiwać dostęp do danych i nimi manipulować, nie martwiąc się o strukturę systemu.
Architektura umowy serwisowej
Warstwa usług ma dwa różne typy interfejsów: interfejsy danych i interfejsy usług. Interfejsy danych to obiekty, które zachowują integralność danych przy użyciu następujących wzorców:
Interfejsy usług zapewniają zestaw metod publicznych, z których może korzystać klient. Istnieją trzy podtypy interfejsów usług:
Interfejsy repozytorium
Interfejsy repozytorium zapewniają użytkownikowi dostęp do trwałych jednostek danych. Na przykład stałymi jednostkami danych w module klienta są odbiorca, adres i grupa. To daje nam trzy różne interfejsy:
Metody stosowane przez te interfejsy to:
Interfejsy zarządzania
Te interfejsy zawierają różne funkcje zarządzania niezwiązane z repozytoriami. Oto kilka przykładów:
Liczba wzorów stale rośnie, a wraz z nimi niektóre z tych funkcji prawdopodobnie zostaną do nich dodane.
Interfejsy metadanych
Interfejsy metadanych dostarczają informacji o wszystkich atrybutach zdefiniowanych dla konkretnej encji. Obejmuje to również niestandardowe atrybuty, do których można uzyskać dostęp za pomocą funkcji getCustomAttribute ($ name). Te niestandardowe atrybuty obejmują:
Odniesienie:
https://www.interactivated.me/uk/blog/service-contracts-magento-2/
źródło