我想知道是否有一个不同的ORM应该为Symfony实现的接口.
当我构建一个接受ORM(现在是Doctrine)的服务并且想要声明类型时,问题出现了.
我猜不同的ORM有不同的行为和类......在这些情况下,如果想要稍后切换,如何构建不依赖于特定ORM的实体?
通常,Symfony对您选择的ORM是不可知的.
在标准版捆绑了教义,也包含一些"桥梁"的代码,便于集成.
但是,您可以使用任何您想要的ORM.例如,众所周知,Propel也可以与Symfony一起使用.Propel团队还维护一个集成包.
ORM必须遵守的形式描述意义上没有"界面".没有这样的事情interface SymfonyOrmInterface {}.
想一想,Symfony应该如何以及为什么需要这个?Symfony是一个基于一组松散耦合组件构建的HTTP框架.这些组件中的大多数甚至不知道ORM是什么,或者当前在应用程序中是否可用.
您通常会通过编写器安装ORM,它将在您的业务代码中提供(假设它支持使用PSR-0/-4进行自动加载).
当然,为了将ORM正确地集成到Symfony中,有一些约定和特性,例如:
这些是在集成包中实现的,通常由相应的ORM供应商提供.
对于您的业务代码,这意味着您不能只将一个ORM替换为另一个ORM.ORM在存储抽象,缓存,查询,水合等方面存在显着差异.更换ORM总是需要您将业务逻辑调整为某些exent,而不仅仅是在Symfony项目中.