Doctrine orm 原则2辅助方法的最佳实践

Doctrine orm 原则2辅助方法的最佳实践,doctrine-orm,Doctrine Orm,我经常在模型中使用助手方法。例如,如果我的模型有一个“date”属性,我可能有getDateShort()或getDateLong()方法。把这些方法放在我的实体中是否可以,或者我应该在实体周围封装模型类,并将实体看作模型资源吗? < P>这是一个相当广泛的问题。 一般来说,将这些类型的方法直接添加到实体中没有什么错。一个很好的经验法则是,如果这些方法只关注实体内部的数据,那么它们是可以使用的 这就是说,像格式化日期这样的操作最好放在一些外部助手类中,因为您可能希望对来自多个不同实体类的日期进行

我经常在模型中使用助手方法。例如,如果我的模型有一个“date”属性,我可能有getDateShort()或getDateLong()方法。把这些方法放在我的实体中是否可以,或者我应该在实体周围封装模型类,并将实体看作模型资源吗?

< P>这是一个相当广泛的问题。 一般来说,将这些类型的方法直接添加到实体中没有什么错。一个很好的经验法则是,如果这些方法只关注实体内部的数据,那么它们是可以使用的

这就是说,像格式化日期这样的操作最好放在一些外部助手类中,因为您可能希望对来自多个不同实体类的日期进行一致的格式化

使用DealDebug示例,您可以考虑只实现一个可以选择可选参数的吸气剂,您可以这样使用:

<?php
$myEntity = $em->find('MyEntity',1);
echo $myEntity->getCreatedAt(MY_DATE_FORMAT_SHORT);

回答得好。在您所描述的情况下,“某种服务类”通常是指订单实体存储库,还是您更喜欢以其他方式执行此操作?通常不是。我可能有一些类名OrderService(如果我有多个类,则为OrderShippingService)。在我看来,存储库有一个明确定义的任务,即返回相应实体的集合。他们的方法通常应该是getSomeSortOfMyEntity($params),而不是其他很多方法。
<?php
/**
 * @Entity
 */
class Order

        // ... 

        /**
         * @OneToMany(targetEntity="OrderLine")
         */ 
        protected $lines = array();

        // ...

        public function getTotal(){
            $sum = 0;
            foreach($this->lines as $l) $sum += $l->getTotal();
            $sum += $this->computeTax();
            $sum += $this->applyCoupons();
            return $sum;
        }
}