我被告知我应该编写我的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);
}
答案 0 :(得分:3)
我将在数据库实体框架内回答这个问题。
一般来说,实体不需要实现接口。但是,也有例外。
将实体传递给第三方代码时
与UserInterface
一样,某些第三方代码希望能够收集有关某个对象的数据。用户登录名和电子邮件就像Symfony一样。
将代码分发为第三方时
一个例子是RoleInterface
。您的捆绑包可能会管理实体,例如FOSUserBundle,但最终用户可能不喜欢您的实施,甚至不希望它们存储在数据库中。使用接口允许我们重新实现现有代码而不会破坏事物。 (你的包应该检查接口而不是类。)
将来可能会发生变化 硬编码对象实质上将它们与代码联系起来。你提到了学说,但如果将来你想要迁移到推进怎么办?与上面的第2点一样,界面使转换更容易。
测试
当只需要接口的实现时,创建模拟对象要容易得多。
团队发展
像上面的第4点。类可能在创建过程中发生更改,这通常会导致在整个代码中更新方法调用。当有多个开发人员时,这会导致问题。拥有一个通用接口会强制每个开发人员遵循由接口管理的规则。