ProductInterface has a DI preference leading it the
ProductModel is marked as falling under the Backward Compatibility Standard (it is marked with
@api), it is still belonging to the Persistence Layer and not the Domain Layer, so hence it should not be used directly. At least, that's my understanding of the Persistence Layer. In other words, injecting
ProductInterface in your class constructor is to be discouraged (and perhaps even prevented): Instead, you should be injecting
ProductRepositoryInterface in your class constructor. And while using the repository, you might get your hands on
ProductInterface anyway (
$product = $productRepository->get(...)) - something that I would call "indirect injection" (I'm making up things as I write).
Here's the question: If the only usage of
ProductInterface is triggered via other classes (a repository or perhaps a factory) and if injecting
ProductInterface in the constructor should not be done, why is there a DI preference for it?