/** * Checks if the given value is valid according to the validator, and returns * the Error Messages object which occurred. Will skip validation if value is * an uninitialized lazy loading proxy. * * @param mixed $value The value that should be validated * @return \TYPO3\Flow\Error\Result * @api */ public function validate($value) { $this->result = new Result(); /** * The idea is that Aggregates form a consistency boundary, and an Aggregate only needs to be * validated if it changed state. Also since all entity relations are lazy loaded by default, * and the relation will only be initialized when it gets accessed (e.g. during property mapping), * we can just skip validation of an uninitialized aggregate. * This greatly improves validation performance for domain models with lots of small aggregate * relations. Therefore proper Aggregate Design becomes a performance optimization. */ if ($value instanceof \Doctrine\ORM\Proxy\Proxy && !$value->__isInitialized()) { return $this->result; } return parent::validate($value); }