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

Rub*_*092 4 php oop laravel laravel-5.2

我正在尝试明智地改进我的代码 OOP。我倾向于将我的一些业务逻辑放在我的控制器中。

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

我知道当您使用 Posts 时。您可以简单地将您的业务逻辑放在您的Post.php模型中。

我现在有一个功能,我可以上传 .xlsx 文件,如果 .xlsx 的格式正确,则必须检查和验证它​​。

它目前在里面ScheduleController@storeDeliveryXlsx

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

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

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

lia*_*man 5

在这种情况下,我个人建议使用服务。服务类本质上是用于可以跨多个控制器重复的通用功能。该服务层是一种设计模式,将帮助你抽象共享的逻辑,即我们的新服务类常见的服务。

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

<?php

namespace App/Services;

class ExcelValidatorService
{

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

}
Run Code Online (Sandbox Code Playgroud)

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

  • 存储库是持久性的外观,用于提供对数据/对象的访问,它用于将您存储数据/对象的方式与应用程序的其余部分分离。即可以实现存储库模式来抽象我们将对象存储在 redis 中的事实,以便我们可以在以后在决定将数据保存在 MySQL 中时换出我们的存储库。另一方面,服务为您的控制器/模型提供通常仅限于业务逻辑的通用功能。即我们将 excel 验证逻辑移动到 ExcelValidator 服务中,以便其他控制器可以使用它。 (2认同)