Php Symfony:在实体中添加自定义函数是一种不好的做法吗?
我知道实体是保存数据的基本类 但是,如果实体具有处理数据的自定义函数,这是一种不好的做法吗 我个人认为这种功能应该进入不同的Php Symfony:在实体中添加自定义函数是一种不好的做法吗?,php,symfony,doctrine-orm,doctrine,Php,Symfony,Doctrine Orm,Doctrine,我知道实体是保存数据的基本类 但是,如果实体具有处理数据的自定义函数,这是一种不好的做法吗 我个人认为这种功能应该进入不同的服务。但是在这种情况下,getnextpyroll非常有用: <?php class Payroll { /** * @var int * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUT
服务
。但是在这种情况下,getnextpyroll
非常有用:
<?php
class Payroll
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \DateTime
*
* @ORM\Column(name="last_payroll", type="datetime", nullable = true)
*/
private $lastPayroll;
/**
* Set lastPayroll
*
* @param \DateTime $lastPayroll
* @return CompanyBase
*/
public function setLastPayroll($lastPayroll)
{
$this->lastPayroll = $lastPayroll;
return $this;
}
/**
* Get lastPayroll
*
* @return \DateTime
*/
public function getLastPayroll()
{
return $this->lastPayroll;
}
public function getNextPayroll()
{
$payrollNext = clone $this->getLastPayroll();
$payrollNext->add(new \DateInterval("P1M"));
return $payrollNext;
}
}
据我所知,只要您的实体没有进入数据库层(存储库应该负责),这应该不是一个坏做法
因此,在实体中,或多或少只返回EntityData(比如返回属于该实体的修改数据的方法)应该可以。通过这种方式,您还可以轻松地使用Twig中的方法,它会自动搜索方法名称(例如,{{User.name}
将搜索用户->获取名称()
,如果找不到,它将搜索用户->名称()
)
如果重用此部件并希望是动态的,那么创建自定义细枝扩展也是一个好主意
我认为,只有当您要做非常复杂的事情时,您才需要一个服务,您实际上还需要注入EntityManager,并从其他实体检索数据,这些实体可能不属于通常关系的一部分。如果您的代码仍然满足可靠的原则,那么这不是一个坏做法(在这种情况下,主要是单一责任原则)
所以,如果该方法与实体逻辑无关(例如,从您的实体发送电子邮件或将某些内容持久化到数据库中),那么它是错误的。否则,它是绝对正确的
与实体相关的逻辑的主要属性——它应该与实体中的其他内容位于同一层
事实上,条令实体不仅仅是数据传输对象(没有行为)。条令的开发人员坚持使用实体作为丰富的模型(查看条令的开发人员之一Marco Pivetta,并查看他的)下面的答案大体上是正确的。对于您的特定情况,下一份工资单应在工资单存储库中确定。这样做的另一个原因是下一份工资单尚未发生。使用存储库预测下一份工资单日期并仅存储实际工资单日期。一致性也很重要。I如果95%的实际业务逻辑驻留在服务中,那么您也可以将剩余的5%放在服务中。