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
)