【问题标题】:Best practice for simple Laravel model operations简单 Laravel 模型操作的最佳实践
【发布时间】:2019-06-23 14:08:33
【问题描述】:

假设我正在编写一个具有以下功能的 Laravel 控制器:对模型进行简单搜索并对结果执行任何操作。像这样的东西(为了简单起见,没有任何验证):

public function search($name)
{
  $person = Persons:where('name', $name)->first();
  doSomethingWith($person);
  // ...
}

我应该将这个微小的 Eloquent 代码移动到 Person 模型的专用函数中吗? 通常我将所有“复杂”操作写入模型以获得简短且可读的控制器,但是当我不得不做这样的小操作时,我总是发现移动一行代码(即使它与数据库直接相关)进入一个单独的模型函数会给我的代码带来太多的开销。

【问题讨论】:

  • 真的取决于doSomethingWith($person) 的作用。如果它只是一个转换,你应该使用像 EloquentResource 这样的转换器,如果它正在改变 $person 它可能不应该在 search() 方法中完成。如果它与Persons 模型紧密耦合,则将其移至模型似乎是合理的,具体取决于其他因素,例如应用程序的大小和方法的可重用性。不管怎样,这个问题不太适合 StackOverflow
  • 您好 DevK,感谢您的评论。我的问题与doSomethingWith($person) 无关,而是与$person = Persons:where('name', $name)->first(); 相关

标签: laravel design-patterns


【解决方案1】:

控制器应该没有业务逻辑。
就您而言,我在第一行看不到业务逻辑 $person = Persons:where('name', $name)->first();
我看不出有任何理由为这一行编写单元测试,因此控制器不缺乏领域知识,您可以将其留在控制器中

【讨论】:

    【解决方案2】:

    您可以使用更多模式来遵循此 MVC 模式。您可以从这里了解更多信息:DevSkill。确保您观看带字幕的视频,因为它是孟加拉语视频。这就是为什么 subtitle 将帮助您了解标准的 MVC 模式软件开发。其实我也是按照这个约定用 Laravel 开发软件?

    【讨论】:

      猜你喜欢
      • 2015-04-16
      • 1970-01-01
      • 2011-02-06
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      相关资源
      最近更新 更多