繁体   English   中英

我可以扩展或挂钩更新存储库的方法吗?

[英]Can I extend or hook in to update method of a repository?

Flow中有没有办法挂钩或扩展存储库的更新方法/功能? 如果对象无论如何都要改变,我喜欢创建几个消息(作为对象)。

目前,我们在将对象提供给存储库进行更新后,在控制器中使用UnitOfWork。 但是,消息传递只是在那个函数中工作,而不是“全局”我在哪里更新该对象。

我不喜欢将它放入该对象的设置者的想法。 在我看来,这将是令人讨厌的代码。

有任何想法吗?

您可以尝试创建将扩展Repository并实现update()方法的YourRepository (或调用parent::update()并实现其余的逻辑)。 然后,您的所有存储库都应该继承YourRepository类而不是Repository

创建YourRepository

use TYPO3\Flow\Annotations as Flow;
use TYPO3\Flow\Persistence\Repository;
/**
 * @Flow\Scope("singleton")
 */
class YourRepository extends Repository {
    public function update($object) {
        parent::update($object);
        // your logic
    }
}

或者从Repository类复制粘贴update()方法体并添加你的逻辑:

public function update($object) {
    if (!is_object($object) || !($object instanceof $this->entityClassName)) {
        $type = (is_object($object) ? get_class($object) : gettype($object));
        throw new \TYPO3\Flow\Persistence\Exception\IllegalObjectTypeException('The value given to update() was ' . $type . ' , however the ' . get_class($this) . ' can only store ' . $this->entityClassName . ' instances.', 1249479625);
    }

    $this->persistenceManager->update($object);
}

现在,域Model每个存储库都应该从YourRepository继承:

use TYPO3\Flow\Annotations as Flow;
/**
 * @Flow\Scope("singleton")
 */
class ModelRepository extends YourRepository {

}

我想你应该看看Flows AOP功能。 在关注点分离(SoC)的前提下,发送通知不是存储库的任务。

看看文档: 面向方面编程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM