마 젠토 2 : 서비스 계약이란?


20

Magento 2에는 서비스 계약 개념을 사용하여 구축 된 구체적인 예가 있습니까? 나는이 용어가 많이 쓰이는 것을 보았지만 Magento 2가 현재 존재하는 것으로 보았을 때 서비스 계약이 더 많은 원칙을 따르고 있는지 또는 실제로 Magento 2의 특정 구현 구현과 관련이 있는지 명확하지 않습니다.


답변:


9

내가 이해 한 것처럼 Api 폴더에 정의 된 모든 인터페이스는 서비스 계약입니다. 따라서 인터페이스가 클래스의 실제 구현 대신 인터페이스가 사용되는 곳에서는 서비스 계약을 사용합니다.

예를 들어 https://github.com/magento/magento2/blob/2.3.2/app/code/Magento/GiftMessage/Model/Plugin/OrderGet.php#L78 이 플러그인 구현입니다.

사용합니다

protected function getOrderGiftMessage(\Magento\Sales\Api\Data\OrderInterface $order)

대신에 \Magento\Sales\Model\Order


링크가 작동하지 않습니다.
젠토 학습자

감사합니다 업데이트
Fooman의 Kristof

6

서비스 (서비스 계약이라고도 함)는 Magento 2의 핵심 개발 패턴 중 하나이며, 쉬운 사용자 지정 / 확장을위한 안정적인 인터페이스를 보장합니다. 코드베이스에는 두 가지 형식이 있습니다 (둘 다 @api클래스 또는 클래스 메소드에 주석을 달아 웹 API로 사용자 정의하거나 노출 할 수있는 안정적인 인터페이스로 식별합니다) : API 또는 SPI. API는 API 폴더에 정의되어 있으며 완전히 리팩토링 된 서비스와 API 전용 모듈이라는 두 가지 형식을 취합니다.

완전히 리팩토링 된 서비스는 Customer, Inventory, Tax 및 Quote * 모듈에 반영됩니다 (고객이 에뮬레이션하는 서비스 인 Quote에는 리팩토링해야하는 영역이 남아 있습니다). API 전용 모듈은 카탈로그, 영업 및 CMS에서 볼 수 있습니다. 완전히 리팩토링 된 서비스의 경우 웹 API와 GUI 모두에 영향을주기 위해 서비스 메소드에서 플러그인 만 수행하면됩니다. API 전용 모듈의 경우 웹 API에 영향을 주려면 서비스 메소드에서 플러그인해야하지만 GUI에 영향을 주려면 여전히 1x 스타일의 사용자 정의를 수행해야합니다.

SPI는 기본적으로 주석이 달린 코드 내에서 인터페이스로, @api타사가 일부 비즈니스 기능을 제공하기 위해 구현할 예정입니다. CarrierInterface배송 모듈에 정의 된 배송 모듈에 정의 된 SPI ( ) 의 예 (예 : Ups).

서비스 프레임 워크는 여러 가지 흥미로운 이점을 제공합니다. webapi.xml구성 (SOAP 및 REST 스타일)을 통한 웹 API (및 메시지 큐를 통해 2.0 이후 제공)로 쉽게 노출 단기 (2.0 이후)에서는 구성을 통해 모두 관리 / 노출 할 수있는 API 호출 (동기 호출 또는 비동기를 발생하도록 구성된 경우 웹 후크, 메시지 출력)을 추가합니다. 보다 안전한 설치 / 업그레이드-프로그래밍 방식으로 문제 상황 (동일한 인터페이스를 구현하는 2 개 이상의 확장)을 식별 할 수 있습니다. 커스터마이징 할 메소드 / 서비스가 하나만 있으므로 웹 API와 GUI 모두에 영향을주는 간소화 된 커스터마이징 (커뮤니티가 완전히 리팩터링 한 모듈 또는 새 모듈 / 서비스 용).


1
다음은 Imagine 2015에서 Magento 2 플랫폼에 대한 더 많은 컨텍스트를 제공하는 데 도움이되는 비디오입니다. magento.com/videos/imagine/… , magento.com/videos/imagine/… , magento.com/videos/imagine/… , magento.com/videos/imagine/…
Chuck

1

이 방법의 사용법을 확인하십시오.

  • \Magento\Customer\Api\AccountManagementInterface::createAccount
  • \Magento\Customer\Api\CustomerRepositoryInterface::getById

0

마 젠토 서비스 계약

기본적으로 서비스 계약은 데이터 무결성을 보호하고 비즈니스 논리를 숨기는 일련의 인터페이스 및 클래스 일뿐입니다. 고객이이를 사용하려는 이유는 계약이 사용자에게 영향을주지 않고 서비스를 발전시킬 수 있기 때문입니다.

이 업그레이드가 중요한 이유는 사용자가 다른 모듈과 상호 작용하는 방식을 변경하기 때문입니다. Magento 1에서는 다른 모듈과 상호 작용하는 좋은 방법이 없었습니다. Magento 2의 서비스 계약을 통해 시스템 구조에 대해 걱정할 필요없이 데이터에 쉽게 액세스하고 조작 할 수 있습니다.

서비스 계약 아키텍처

서비스 계층에는 데이터 인터페이스와 서비스 인터페이스의 두 가지 인터페이스 유형이 있습니다. 데이터 인터페이스는 다음 패턴을 사용하여 데이터 무결성을 유지하는 객체입니다.

Theyre read-only, since they only define constants and getters.
Getter functions can contain no parameters.
A getter function can only return a simple object type (string, integer, Boolean), a simple type array, and another data interface.
Mixed types cant be returned by getter functions.
Data entity builders are the only way to populate and modify data interfaces.

서비스 인터페이스는 클라이언트가 사용할 수있는 일련의 공용 메소드를 제공합니다. 세 가지 서비스 인터페이스 하위 유형이 있습니다.

Repository Interfaces
Management Interfaces
Metadata Interfaces

리포지토리 인터페이스

리포지토리 인터페이스는 사용자가 영구 데이터 엔터티에 액세스 할 수 있도록합니다. 예를 들어 고객 모듈 내의 영구 데이터 엔터티는 소비자, 주소 및 그룹입니다. 이것은 우리에게 세 가지 다른 인터페이스를 제공합니다 :

CustomerRepositoryInterface
AddressRepositoryInterface
GroupRepositoryInterface

이러한 인터페이스의 방법은 다음과 같습니다.

Save  If theres no ID, creates a new record, and updates whats existing if there is one.
Get  Looks for the IDs in the database and returns a certain data entity interface.
GetList  Finds all data entities that correspond with the search criteria, then gives access to the matches by returning the search result interface.
Delete  Deletes the selected entity
DeleteById  Deletes the entity when you only have its key.

관리 인터페이스

이 인터페이스에는 리포지토리와 관련이없는 다른 관리 기능이 포함되어 있습니다. 여기 몇 가지 예가 있어요.

AccountManagementInterface contains functions such as createAccount(), isEmailAvailable(), changePassword(), and activate().
AddressManagementInterface checks whether an address is valid by using the validate() function.

패턴의 수는 지속적으로 증가하고 있으며, 그에 따라 이러한 기능 중 일부가 추가 될 수 있습니다.

메타 데이터 인터페이스

메타 데이터 인터페이스는 특정 엔티티에 대해 정의 된 모든 속성에 대한 정보를 제공합니다. 여기에는 getCustomAttribute ($ name) 함수로 액세스 할 수있는 사용자 정의 속성도 포함됩니다. 이러한 사용자 정의 속성은 다음과 같습니다.

EAV attributes  Defined via the administration interface for a local site. They can differ according to the site, which means that they cant be represented in the data entity interface written in PHP.
Extension attributes, for which the extension modules are used.

참고:

https://www.interactivated.me/uk/blog/service-contracts-magento-2/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.