使用https://insight.sensiolabs.com来扫描/检查我的代码时,我收到以下警告:
Doctrine Entity Manager不应作为参数传递。
为什么在服务中注入Entity Manager是不好的实践?有什么解决方案吗?
使用https://insight.sensiolabs.com来扫描/检查我的代码时,我收到以下警告:
Doctrine Entity Manager不应作为参数传递。
为什么在服务中注入Entity Manager是不好的实践?有什么解决方案吗?
关于不能将实体持久化到存储库的评论。
class MyRepository extends EntityRepository
{
public function persist($entity) { return $this->_em->persist($entity); }
public function flush () { return $this->_em->flush (); }
我喜欢让我的存储库遵循一个“标准”的存储库接口。因此,我会:
interface NyRepositoryInterface
[
function save($entity);
function commit();
}
class MyRepository extends EntityRepository implements MyRepositoryInterface
{
public function save ($entity) { return $this->_em->persist($entity); }
public function commit() { return $this->_em->flush (); }
我目前正在处理一个相当大的项目,并最近开始采用可以改变数据的存储库方法。我真的不明白为什么必须将EntityManager注入为依赖项,这与向任何类注入ServiceManager一样糟糕。这只是人们试图证明的糟糕设计。像持久化、删除和刷新等操作可以抽象成像AbstractMutableRepository这样的东西,每个其他存储库都可以继承它。到目前为止,它一直表现得很好,使代码更易读和易于单元测试!
请给我展示至少一个服务,其中EM已经被注入,并且它的单元测试看起来正确?能够对具有EM注入的内容进行单元测试更多地涉及测试实现而不是其他任何内容。然后会出现这种情况:你需要设置很多模拟,以至于你无法真正称之为良好的单元测试!它只是代码覆盖率的提高者,仅此而已!