Laravel架构疑问:创建文章时应在PostService还是控制器调用TagService关联标签?
Laravel 文章关联标签的架构选择建议
应该在PostService里处理标签关联逻辑,原因如下:
- 让控制器保持轻量化:控制器的核心职责是接收请求参数、调用对应服务、返回响应结果,不该掺杂具体业务逻辑。如果把标签关联放到控制器里,会让控制器代码冗余,违背单一职责原则。
- 业务逻辑更内聚:创建文章并绑定标签属于同一个完整的业务操作(发布带标签的文章),把这部分逻辑放在同一个服务层里,后续修改、复用这个业务流程时更高效,也便于统一做异常处理。
- 适配Spatie标签包的使用习惯:Spatie的
laravel-tags包本身提供了模型级别的便捷方法(比如$post->attachTags($tags)),在PostService中拿到创建后的Post实例后,直接调用这些方法或者调用TagService来完成关联,逻辑链路更顺畅,不需要把流程拆到控制器层。
哪怕你单独封装了TagService,也应该在PostService内部调用它,控制器只需要把包含标签信息的请求参数传递给PostService即可,不需要介入具体的业务实现细节。
内容的提问来源于stack exchange,提问作者Max Pattern
相关产品推荐
相关产品推荐

