Magento 2:使用服务合同的好处是什么?


15

因此,如您所知,Magento 2建议的处理CRUD行为的模型/集合的方法是使用服务合同。

但是仍然根据Magento SE问答,似乎大多数人倾向于直接使用模型/资源模型/集合来代替。

作为加载报价的示例,我可以这样直接通过工厂进行报价:

$this->quoteFactory->create()->load($quoteId);

$this->quoteFactory的实例在哪里\Magento\Quote\Model\QuoteFactory

但是我也可以通过服务合同来做到这一点:

$this->quoteRepository->get($quoteId);

$this->quoteRepository的实例在哪里\Magento\Quote\Api\CartRepositoryInterface

所以我的问题是,与工厂相比,使用服务合同什么好处?

Answers:


18

使用服务合同的好处(根据对magento 2的理解)

服务合同对于magento 2具有许多重要功能,例如:

  • 模块升级变得容易。

  • 简化模块的自定义,而无需深入研究核心文件。

  • 减少系统中模块之间的冲突。

  • 使用服务合同,Magento升级更安全。

  • 由于服务在其新版本中将保持不变,因此将来升级现有模块很容易。

  • 对于模型/集合,新发行版中不存在这种情况。

2

服务合同的好处:

  • 增强Magento的模块化

  • 确保其他模块和第三方扩展可以实现的定义良好,持久的API

  • 轻松将服务配置为Web API。

  • 与基础关系数据库架构中的数据模型相比,数据实体揭示了更简单的数据模型

  • 对不同的数据收集使用不同的存储技术


2

我认为最大的好处是模块可以确定其他模块可以使用哪些功能。在Magento 1中,您有一些帮助程序,通常会为此目的使用一些误用(但这是其他讨论内容),但是在Magento 2中,您的模块可以为其他模块提供功能(例如,由第三方开发人员开发),并将其分离并自我-包含。

依赖注入提供了一个系统,您可以在其中使用构造中的接口,因此您只能访问那些公共方法。

一些例子:

要将产品链接到多个类别?用途\Magento\Catalog\Api\CategoryLinkManagementInterface

$this->categoryLinkManagement->assignProductToCategories(
    $sku,
    $categoryIds
);

是否要增加产品的库存数量?用途Magento\CatalogInventory\Api\StockManagementInterface

$this->stockManagement->backItemQty(
    $productId,
    $itemsToReceive
);

这两个示例完美地展示了服务合同的正确使用。除此之外,它们提供了一个统一的接口来与以下设备进行通信:

  • 其他模块(如上所述)
  • 控制台命令
  • API调用
  • 等等
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.