Symfony:在实体中添加自定义功能是不好的做法吗?



我知道实体是持有数据的基本类。

,如果实体具有操纵数据的自定义功能,这是不良习惯吗?

我个人认为这种功能应该涉及其他Service。但是在这种情况下,getNextPayroll非常有用:

<?php
class Payroll
{
    /**
     * @var int
     *
     * @ORMColumn(name="id", type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @var DateTime
     *
     * @ORMColumn(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;
    }

}

下一个薪资的日期未存储在数据库中。只有上一个工资单的日期。我应该在其他服务中获得下一个工资日期,还是可以在实体中使用非理论生成的自定义函数?

这不是一个不好的做法,如果您的代码仍然满足可靠的原则(主要是单一责任,principe在这种情况下(

因此,如果该方法与实体逻辑无关(例如,向您的实体发送电子邮件或将某些内容持续到数据库( - 这是错误的。否则,绝对可以。

与实体有关的逻辑的主要属性 - 它应该在同一层中与实体中的另一件东西。

实际上,学说实体不仅是数据传输对象(没有行为(。Doctrine的开发人员坚持使用这些实体作为丰富的模型(观看Marco Pivetta的视频,Marco Pivetta是Doctrine的开发人员之一,并看到他的不错的演讲(

据我所知,只要您的实体不进入数据库层,存储库应该照顾的,那就不是不好的做法。

因此,您或多或少都可以将EntityData返回(例如您的方法返回仅修改属于实体的数据(应该在实体IT自我中可以很好。这样,您还可以轻松地使用Twig中的方法自动搜索方法名称(例如,{{ User.name }}将搜索User->getName(),如果找不到它,它将搜索User->name()(

如果您重复使用此部分并想保持动态,那么创建自定义树枝扩展程序也可能是一个好主意。

我认为,只有您要做非常复杂的事情,您实际上还需要注入EntityManager并从其他可能不是通常关系的一部分的实体中检索数据。

<</p>

相关内容

  • 没有找到相关文章