我最近创建的包依赖于存储库接口。源数据的选择之一是数据库和Doctrine ORM。因为数据库只是一种可能的选择,所以我不想集成整个Doctrine ORM包,而是创建一个仅依赖于Doctrine\ORM\EntityManagerInterface的适当适配器。问题是我如何才能部分地从Doctrine ORM中"composer require“?我想补充的是,我不可能找到任何单独的包与Doctrine ORM EntityManagerInterface。
提前谢谢。
发布于 2019-12-12 00:25:54
不可能只需要一个包中的一个类/接口。相反,您可以做的是需要doctrine/persistence。这个库提供了持久化接口,然后Doctrine ORM/ODM使用这些接口。然后,您将依赖ObjectManager-interface,而不是依赖于EntityManagerInterface。
如果您既不想依赖doctrine/orm,也不想依赖doctrine/persistence,那么您应该使用require-dev和suggests,以便在开发过程中使用这些依赖项,例如,针对Doctrine EntityManager编写测试,并告知您的库的用户您明确支持哪些持久化库,也需要这些库。
您还可以创建自己的EntityManagerInterface,然后提供第二个包,以便与不同的提供程序集成,然后在适配器中实现该接口。因此,您不必将custom /orm引入您的库中,而是公开您的接口,并为custom/orm之类的数据提供程序提供定制库。通过这种方式,您可以反转依赖项要求,但不幸的是,您将有更多的维护工作。你可以看看像php-http/httplug这样的项目和相应的php-http/*-client包来获得灵感。当涉及到集成多个客户端时,它们有类似的方法(guzzle,curl,...)并在它们之上提供一个通用的抽象。
https://stackoverflow.com/questions/59289457
复制相似问题