我知道在Magento 2的模块之间工作的首选方法是使用服务合同。
因此,如果要加载产品,请使用产品存储库:
$product = $productRepository->getById($id);
通过合同返回的实例Magento\Catalog\Api\Data\ProductInterface
。
但是我也可以改用旧方法,直接调用域层:
$product = $productFactory->create()->load($id);
在任何情况下这是必要还是有用的?
devdocs说(突出显示):
一个模块可以直接调用另一个模块。在大多数情况下,不建议使用这种紧密耦合的解决方案,但有时是不可避免的。
[...]
您调用另一个模块的域层代码的策略在很大程度上取决于系统的独特配置和需求。
来源:http : //devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/domain_layer.html
关于一个相关问题的评论说:
使用存储库将为您提供一个产品数据模型(
Api/Data/Product
),该模型是转换为精简DTO的产品模型。需要考虑的东西,因为它们完全不同
但据我所见,正常情况下对象是相同的,只是每个phpDoc的返回类型不同(Magento\Catalog\Api\Data\ProductInterface
/ Magento\Catalog\Model\Product
)