php - 当您没有该功能的指定模型时,将业务逻辑放在哪里?拉维尔

标签 php laravel oop laravel-5

我正在尝试以 OOP 方式改进我的代码。 我倾向于将一些业务逻辑放入 Controller 中。

有些人告诉我这是不可取的。

我知道,例如,当您使用帖子时。您可以简单地将您的业务逻辑放入 Post.php 中型号。

我现在有一个功能,可以上传 .xlsx 文件,并且必须检查和验证 .xlsx 的格式是否正确。

目前位于ScheduleController@storeDeliveryXlsx内。

但是我没有指定的模型来存储验证?

这是需要存储库设计模式的地方吗?或者创建一个不与数据库通信的模型是否可以,例如:DeliveryFile.php我将稍后可以在整个应用程序中使用的逻辑放在其中,如下所示:DeliveryFile::validate($file);DeliveryFile::upload(file); .

我认为我可能会在 .xlsx 上对多个实例重复使用相同的验证。所以我想做类似 Model::validate($file); 的事情。但我不知道该把代码放在哪里。

最佳答案

在这种情况下,我个人建议使用服务。服务类本质上是用于您可以在多个 Controller 上重复的通用功能。 服务层是一种设计模式,可帮助您将共享逻辑抽象为公共(public)服务,即我们的新服务类。

因此,在您的实例中,您可以拥有一个 Service 类,例如 ExcelValidator,然后使用如下所示的内容来构建您的方法。

<?php

namespace App/Services;

class ExcelValidatorService
{

  public function validate($file) 
  {
    // our validate logic
  }

}

然后在您的 Controller 或模型中,您可以调用 ExcelValidator 服务来实现您的重复验证逻辑。

关于php - 当您没有该功能的指定模型时,将业务逻辑放在哪里?拉维尔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49233562/

相关文章:

php - 我应该在 Laravel 中为时间戳列创建索引吗

java - 使用 GSON 反序列化嵌套的通用类时的奇怪行为

java泛型和程序设计,如何正确实现包含父类(super class)子类型的列表?

c# - 混淆 : Internal, 保护和保护内部

php - 使用 PHP echo Twitter 共享计数?

php - 如何通过 PHP 中的 STRIPE API 在 STRIPE 中注册用户

sql - 基于主题查找相似匹配但限制完全匹配的文本匹配 SQL 查询

php - php中MySQL查询的问题

php - 无法更新子行

mysql - Laravel 5 选择查询将我的链接变成奇怪的格式