首页 > 解决方案 > 我怎样才能“作曲家要求”只是 Doctrine ORM EntityManagerInterface

问题描述

我最近创建的包依赖于存储库接口。源数据的选择之一是数据库和 Doctrine ORM。由于数据库只是可能的选择之一,我不想集成整个 Doctrine ORM 包,而是创建一个仅依赖于 Doctrine\ORM\EntityManagerInterface 的适当适配器。问题是我如何部分地从 Doctrine ORM 中“作曲家要求”?我想补充一点,我找不到任何带有 Doctrine ORM EntityManagerInterface 的单独包。

提前致谢。

标签: ormdoctrinecomposer-phprequire

解决方案


没有办法只需要一个包中的单个类/接口。你可以做的是需要学说/持久性。该库提供持久性接口,然后由 Doctrine ORM/ODM 使用。而不是依赖于EntityManagerInterface你将依赖于ObjectManager-interface。

如果您既不想依赖于教义/orm 也不依赖于教义/持久性,那么您应该使用require-devsuggests允许在开发过程中使用这些依赖项,例如针对 Doctrine EntityManager 编写测试,并通知您的库的用户您明确支持哪些持久性库并要求这些。

您还可以创建自己EntityManagerInterface的包,然后提供第二个包以与不同的提供者集成,然后在适配器中实现该接口。因此,您无需将教义/orm 拉入您的库,而是公开您的界面并为诸如教义/orm 之类的数据提供者提供自定义库。这样您就可以反转依赖要求,但不幸的是,您将有更多的维护工作。您可以查看php-http/httplug等项目和相应的 php-http/*-client 包以获取灵感。当涉及到集成多个客户端(guzzle、curl 等)并在它们之上提供通用抽象时,它们具有类似的方法。


推荐阅读