The ProductInterface
has a DI preference leading it the ProductModel
. While 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?