为何重构的代码要放在 Topic.php 中,而不是直接在 ReplyObserver.php 中?

重构的代码放在 Models/topic.php 中,而不是直接重构在Observers/ReplyObserver.php

public function updateReplyCount()
{
$this->reply_count = $this->replies->count();
$this->save();
}

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

操作数据库的方法放在模型中,操作逻辑的放在其他文件中

5年前 评论
讨论数量: 7

因为在 created() 中和 deleted() 都重复了下面的代码。

$reply->topic->reply_count = $reply->topic->replies->count();
$reply->topic->save();

所以讲这部分代码重构到模型中,当然你也可以在 ReplyObserver 中来处理这个逻辑,那么就应该这样来实现。

protected function updateReplyCount($reply)
{
    $reply->topic->reply_count =  $reply->topic->replies->count();
    $reply->topic->save();
}

public function created(Reply $reply)
{
    $this->updateReplyCount($reply);
}

public function deleted(Reply $reply)
{
    $this->updateReplyCount($reply);
}

但是这样看起来怪怪的。

5年前 评论

因为这个操作属于模型操作

5年前 评论

@sunnylin 可否告知通常什么类型的方法放在模型中,什么类型的放在其他文件中呢?

5年前 评论

@青风百里
感谢!
如果能在ReplyObserver 中来处理这个逻辑,为何要放到模型中呢。
对于重构的逻辑或者复用的mothed 通常放到哪里呢?模型中还是其他地方啊?

5年前 评论

@abc20082009 因为放到模型中更方便。至于放到哪个地方,那里方便就放到那里。触发了 creadted 事件之后,假设你需要更新的是 User 模型,就可以考虑 User 模型中实现,假设你要跨域更新另一个服务器的数据,那么可以考虑弄了个 trait ,然后在 trait 中来实现。

5年前 评论

操作数据库的方法放在模型中,操作逻辑的放在其他文件中

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!