orm - 我怎样才能“作曲家要求”只是 Doctrine ORM EntityManagerInterface
问题描述
我最近创建的包依赖于存储库接口。源数据的选择之一是数据库和 Doctrine ORM。由于数据库只是可能的选择之一,我不想集成整个 Doctrine ORM 包,而是创建一个仅依赖于 Doctrine\ORM\EntityManagerInterface 的适当适配器。问题是我如何部分地从 Doctrine ORM 中“作曲家要求”?我想补充一点,我找不到任何带有 Doctrine ORM EntityManagerInterface 的单独包。
提前致谢。
解决方案
没有办法只需要一个包中的单个类/接口。你可以做的是需要学说/持久性。该库提供持久性接口,然后由 Doctrine ORM/ODM 使用。而不是依赖于EntityManagerInterface
你将依赖于ObjectManager
-interface。
如果您既不想依赖于教义/orm 也不依赖于教义/持久性,那么您应该使用require-dev
并suggests
允许在开发过程中使用这些依赖项,例如针对 Doctrine EntityManager 编写测试,并通知您的库的用户您明确支持哪些持久性库并要求这些。
您还可以创建自己EntityManagerInterface
的包,然后提供第二个包以与不同的提供者集成,然后在适配器中实现该接口。因此,您无需将教义/orm 拉入您的库,而是公开您的界面并为诸如教义/orm 之类的数据提供者提供自定义库。这样您就可以反转依赖要求,但不幸的是,您将有更多的维护工作。您可以查看php-http/httplug等项目和相应的 php-http/*-client 包以获取灵感。当涉及到集成多个客户端(guzzle、curl 等)并在它们之上提供通用抽象时,它们具有类似的方法。
推荐阅读
- vba - 如何将例外列表添加到字符串搜索?
- facebook - 我可以使用 API 向我的客户 Facebook 关注者发送直接消息吗?
- ruby-on-rails - 无法将字符串注入 Trix 编辑器
- c - 为什么对象的句柄经常显示为指针指针
- javascript - React 链接更新 URL 但页面没有更改/呈现
- php - 在子主题中使用作曲家
- python - 管道中的 Sklearn_pandas 返回 TypeError: 'builtin_function_or_method' object is not iterable
- javascript - 通过在谷歌地图上拖放标记获取用户地址
- visual-studio - Visual Studio 2017 中使用虚拟机的共享工作区 (TFS)
- java - Maven编译中不存在包