Magento 2: Hợp đồng dịch vụ là gì


20

Trong Magento 2, có một ví dụ cụ thể về thứ gì đó được xây dựng bằng khái niệm Hợp đồng dịch vụ không? Tôi đã thấy thuật ngữ này xuất hiện rất nhiều, nhưng nhìn vào Magento 2 vì nó tồn tại với tôi nếu Hợp đồng dịch vụ là nguyên tắc chỉ đạo hơn, hoặc nếu chúng thực sự gắn liền với việc triển khai cụ thể mọi thứ trong Magento 2.


Câu trả lời:


9

Theo tôi hiểu, tất cả các giao diện được xác định trong thư mục Api là Hợp đồng dịch vụ. Vì vậy, bất cứ nơi nào giao diện được sử dụng thay vì triển khai thực tế của lớp mà nó sử dụng Hợp đồng dịch vụ.

Một ví dụ sẽ là triển khai plugin này tại đây https://github.com/magento/magento2/blob/2.3.2/app/code/Magento/GiftMessage/Model/Plugin/OrderGet.php#L78

Nó sử dụng

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

thay vì \Magento\Sales\Model\Order


Liên kết không hoạt động.
Học viên Magento

Cảm ơn nó đã được cập nhật
Kristof tại Fooman

6

Dịch vụ (còn gọi là hợp đồng dịch vụ) là một trong những mô hình phát triển cốt lõi của chúng tôi trong Magento 2 để đảm bảo giao diện ổn định để dễ dàng tùy chỉnh / mở rộng. Chúng có 2 biểu mẫu trong cơ sở mã (cả hai đều được chú thích @apitrên các phương thức lớp hoặc lớp để xác định chúng là các giao diện ổn định mà bạn có thể tùy chỉnh và hiển thị dưới dạng API web): API hoặc SPI. Các API được xác định trong thư mục API và có hai dạng - một dịch vụ được tái cấu trúc hoàn toàn và chỉ là một mô-đun API.

Các dịch vụ được tái cấu trúc hoàn toàn được phản ánh trong các mô-đun Khách hàng, Hàng tồn kho, Thuế và Trích dẫn * (Khách hàng là dịch vụ để mô phỏng, Trích dẫn có một khu vực còn lại cần phải được tái cấu trúc). Một mô-đun chỉ API có thể được nhìn thấy trong Danh mục, Bán hàng và CMS. Đối với các dịch vụ được tái cấu trúc hoàn toàn, bạn chỉ cần thực hiện một plugin trên phương thức dịch vụ để tác động đến cả apis web và GUI. Đối với các mô-đun chỉ dành cho API, bạn cần phải bổ sung phương thức dịch vụ để tác động đến apis web nhưng vẫn cần thực hiện các tùy chỉnh kiểu 1x để tác động đến GUI.

SPI về cơ bản là các giao diện trong mã được chú thích với @apicác điểm dự định mà các bên thứ 3 sẽ triển khai để cung cấp một số chức năng kinh doanh. Một ví dụ về SPI ( CarrierInterface) được xác định trong mô-đun Vận chuyển mà bạn triển khai trong mô-đun vận chuyển của mình (tức là Ups).

Khung dịch vụ cung cấp một số lợi thế thú vị. Dễ dàng hiển thị dưới dạng api web (và sắp tới 2.0 qua hàng đợi tin nhắn) webapi.xmlcấu hình vi (theo kiểu SOAP và REST). Trong thời hạn gần (bài 2.0), chúng tôi sẽ thêm cuộc gọi API (cuộc gọi đồng bộ hóa hoặc Webhooks nếu được định cấu hình để kích hoạt async, tin nhắn ra) tất cả có thể được quản lý / hiển thị thông qua cấu hình. Cài đặt / nâng cấp an toàn hơn - bạn có thể lập trình xác định các tình huống sự cố (2 hoặc nhiều tiện ích mở rộng thực hiện cùng giao diện). Tùy chỉnh hợp lý hóa tác động đến cả apis web và gui vì chỉ có một phương thức / dịch vụ để tùy chỉnh (đối với mô-đun được tái cấu trúc hoàn toàn hoặc mô-đun / dịch vụ mới do cộng đồng tạo ra).


1
Dưới đây là một số video từ Imagine 2015 sẽ giúp cung cấp thêm ngữ cảnh của nền tảng Magento 2. magento.com/videos/imagine/... , magento.com/videos/imagine/... , magento.com/videos/imagine/... , magento.com/videos/imagine/...
Chuck

1

Kiểm tra tập quán của các phương pháp này:

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

0

Hợp đồng dịch vụ Magento

Về cơ bản, hợp đồng dịch vụ chỉ là một tập hợp các giao diện và lớp bảo vệ tính toàn vẹn dữ liệu và ẩn logic kinh doanh. Lý do tại sao khách hàng sẽ muốn sử dụng điều này là vì hợp đồng cho phép dịch vụ phát triển mà không ảnh hưởng đến người dùng.

Lý do nâng cấp này rất quan trọng là vì nó thay đổi cách người dùng tương tác với các mô-đun khác nhau. Trong Magento 1, không có cách tương tác tốt với các mô-đun khác. Với các hợp đồng dịch vụ trong Magento 2, bạn có thể truy cập và thao tác dữ liệu dễ dàng mà không phải lo lắng về cấu trúc của hệ thống.

Kiến trúc hợp đồng dịch vụ

Lớp dịch vụ có hai loại giao diện khác nhau: Giao diện dữ liệu và Giao diện dịch vụ. Giao diện dữ liệu là các đối tượng bảo tồn tính toàn vẹn dữ liệu bằng cách sử dụng các mẫu sau:

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.

Giao diện dịch vụ cung cấp một tập hợp các phương thức công khai mà khách hàng có thể sử dụng. Có ba kiểu giao diện dịch vụ:

Repository Interfaces
Management Interfaces
Metadata Interfaces

Giao diện kho lưu trữ

Giao diện kho lưu trữ đảm bảo rằng người dùng có thể truy cập các thực thể dữ liệu liên tục. Ví dụ: các thực thể dữ liệu liên tục trong Mô-đun khách hàng là Người tiêu dùng, Địa chỉ và Nhóm. Điều này cho chúng ta ba giao diện khác nhau:

CustomerRepositoryInterface
AddressRepositoryInterface
GroupRepositoryInterface

Các phương thức mà các giao diện này có là:

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.

Giao diện quản lý

Các giao diện này chứa các chức năng quản lý khác nhau không liên quan đến kho lưu trữ. Dưới đây là một số ví dụ:

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

Số lượng các mẫu không ngừng tăng lên và vì vậy, một số chức năng này có thể sẽ được thêm vào chúng.

Giao diện siêu dữ liệu

Giao diện siêu dữ liệu cung cấp thông tin về tất cả các thuộc tính được xác định cho một thực thể cụ thể. Điều này cũng bao gồm các thuộc tính tùy chỉnh mà bạn có thể truy cập bằng hàm getCustomAttribution ($ name). Các thuộc tính tùy chỉnh này bao gồm:

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.

Tài liệu tham khảo:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.