Usar repositorios y SearchCriteria evita acoplarse a colecciones directas y facilita mantenimiento.
Consulta por filtros
<?phpuse Magento\Catalog\Api\ProductRepositoryInterface;use Magento\Framework\Api\SearchCriteriaBuilder;use Magento\Framework\Api\FilterBuilder;
class ProductFinder{ public function __construct( private ProductRepositoryInterface $productRepository, private SearchCriteriaBuilder $searchCriteriaBuilder, private FilterBuilder $filterBuilder ) {}
public function getEnabledBySkuPrefix(string $prefix) { $skuFilter = $this->filterBuilder ->setField('sku') ->setConditionType('like') ->setValue($prefix . '%') ->create();
$statusFilter = $this->filterBuilder ->setField('status') ->setConditionType('eq') ->setValue(1) ->create();
$criteria = $this->searchCriteriaBuilder ->addFilters([$skuFilter, $statusFilter]) ->setPageSize(50) ->create();
return $this->productRepository->getList($criteria)->getItems(); }}Conclusión
Este patron mejora testabilidad, reduce deuda técnica y alinea el código con las prácticas recomendadas por Magento.