我的学说实体应该实现接口吗?
作者:互联网
有人告诉我应该对我的Doctrine POPO实体进行编码以实现接口.我的理解是,对接口进行编码是最佳实践.
有人可以为我的Doctrine实体实现接口提供一些好处.我想确保在花时间编写所有实现接口的实体之前,我已经了解了进行此抽象的好处.下面是一个示例(为简单起见,请注意包括了“ Doctrine”注释):
<?php
class User implements UserInterface()
{
function getName() {
return $this->name;
}
function setName($name) {
$this->name = $name;
}
function addPermission(Permission $permission) {
$this->permissions[] = $permission;
}
}
interface UserInterface()
{
function getName();
function setName($name);
function addPermission(Permission $permission);
}
解决方法:
我将仅在数据库实体范围内回答此问题.
一般来说,实体不需要实现接口.但是,也有例外.
>将您的实体传递给第三方代码时.
与UserInterface一样,某些第三方代码希望能够收集有关某个对象的数据.用户的登录名和电子邮件(与Symfony一样).
>以第三方身份分发代码时.
一个示例是RoleInterface.您的捆绑包可以管理实体,例如FOSUserBundle,但是最终用户可能不喜欢您的实现,甚至不希望它们存储在数据库中.使用接口可以使我们重新实现现有代码,而不会造成麻烦. (您的捆绑软件应检查接口而不是类).
>未来情况可能会发生变化.
硬编码对象本质上将它们与代码联系在一起.您提到了学说,但是如果将来您想迁移以推进该怎么办?像上面的第2点一样,接口使过渡更加容易.
>测试
当只需要接口的实现时,创建模拟对象要容易得多.
>团队发展
就像上面的第4点.一个类在其创建过程中可能会发生变化,这通常导致整个代码中方法调用的更新.当有多个开发人员时,这会导致问题.拥有通用的界面会迫使每个开发人员都遵循该界面所控制的规则.
标签:doctrine-orm,symfony,doctrine,php 来源: https://codeday.me/bug/20191120/2044552.html