2. Magento to system modułowy, który umożliwia zewnętrznym programistom
dostosowywanie i zastępowanie podstawowych (corowych) części frameworka.
Ta elastyczność ma jednak swoją wadę. Logika biznesowa przenika przez warstwy
systemu Magento, co przejawia się jako zduplikowany i niespójny kod.
Podczas aktualizacji programiści mogą mieć trudności ze śledzeniem zależności,
pomiędzy niestandardowymi modułami (rozszerzeniami).
3. Co to jest Service Contract?
Service Contract to zestaw interfejsów
PHP zdefiniowanych dla modułu.
Service Contract obejmuje interfejsy danych
(znajdujące się w Api/Data, które zachowują
integralność) oraz interfejsy serwisowe (które
ukrywają szczegóły logiki biznesowej przed
kontrolerami, usługami sieciowymi i innymi
modułami).
Jeśli programiści zdefiniują interfejsy danych i
usług zgodnie z zestawem wzorców projektowych,
wówczas powstanie dobrze zdefiniowany, trwały
interfejs API.
Interfejs ten może zaimplementować rozszerzenia
i moduły innych firm za pomocą modeli i resource
model.
4. Korzyści ze stosowania Service Contract:
- Aktualizacja modułu staje się łatwa.
- Upraszcza dostosowywanie modułu bez konieczności zagłębiania się w
corowe pliki.
- Zmniejsza konflikty między modułami.
- Aktualizacja Magento staje się bezpieczniejsza.
- Umożliwia udostępnienie niestandardowej funkcjonalności modułu jako
web API poprzez dodanie configu w etc/webapi
- Łatwiejsze testy jednostkowe.
5. Service contract wzorce projektowania
Interfejsy danych (data interfaces) definiują funkcje, które
zwracają informacje o jednostkach danych, czyli wszystkie ‘gettery’
i ‘settery’. Należy zdefiniować interfejsy danych dla umowy
serwisowej w podkatalogu Api / Data modułu.
vendor/magento/module-cms/Api/Data/BlockInterface.php
Implementacja tego interfejsu jest w
vendor/magento/module-cms/Model/Block.php
Search Criteria - w katalogu Api / Data tworzy się
również osobny interfejs dla kryteriów wyszukiwania.
vendor/magento/module-cms/Api/Data/BlockSearchResultsInterface.php
6. Interfejsy serwisowe (service interfaces) obejmują interfejsy:
repozytorium (repository),
zarządzania (management),
metadanych (metadata).
Należy zdefiniować interfejsy serwisowe dla umowy serwisowej w podkatalogu Api dla
modułu.
7. Interfejsy repozytorium (service interface)
zapewniają dostęp do trwałych jednostek danych.
Interfejsy repozytorium muszą zapewniać
funkcje:
save - Jeśli Id nie jest określony, tworzy rekord,
jeśli określono id, aktualizuje rekord.
get(id) - Wykonuje wyszukiwanie bazy danych
według id.
getList() - Przeprowadza wyszukiwanie
wszystkich jednostek danych, które spełniają
określone kryteria wyszukiwania.
delete() - Usuwa określoną jednostkę.
deleteById() - Usuwa określoną jednostkę według Id.
vendor/magento/module-cms/Api/BlockRepositoryInterface.php
8. Interfejsy zarządzania zapewniają funkcje
zarządzania niezwiązane z repozytoriami.
Przykład:
AccountManagementInterface
definiuje m.in. funkcje:
- createAccount(),
- changePassword(),
- activate(),
- isEmailAvailable().
vendor/magento/module-customer/Api/AccountManagementInterface.php
Interfejsy metadanych dostarczają informacji o tym, jakie atrybuty są zdefiniowane dla konkretnej encji