Entiendo que la forma preferida de trabajar entre módulos en Magento 2 es usar los contratos de servicio.
Entonces, si quiero cargar un producto, uso el repositorio del producto:
$product = $productRepository->getById($id);
que es por contrato devolviendo una instancia de Magento\Catalog\Api\Data\ProductInterface
.
Pero también podría usar el método antiguo, llamando directamente a la capa de dominio:
$product = $productFactory->create()->load($id);
¿Hay algún caso en el que esto sea necesario o útil?
Los devdocs dicen (resaltado agregado):
Un módulo puede llamar directamente a otro módulo. Esta solución estrechamente acoplada no se recomienda para la mayoría de las situaciones, pero a veces es inevitable .
[...]
Su estrategia para llamar al código de capa de dominio de otro módulo depende en gran medida de la configuración y las necesidades únicas de su sistema.
Fuente: http://devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/domain_layer.html
Y un comentario sobre una pregunta relacionada declaró:
el uso del Repositorio le dará un modelo de datos del Producto (
Api/Data/Product
), que es un modelo de Producto convertido en un DTO tonto. Algo a considerar, ya que son bastante diferentes.
Pero por lo que puedo ver, los objetos son los mismos en condiciones normales, solo los tipos de retorno por phpDoc difieren ( Magento\Catalog\Api\Data\ProductInterface
/ Magento\Catalog\Model\Product
)