【问题标题】:How to refactor laravel application code effectively如何有效地重构 laravel 应用程序代码
【发布时间】:2019-02-05 09:02:10
【问题描述】:

由于一些问题,我能够重构我的 laravel 5.4 应用程序代码:代码复杂、缺乏 oo 设计经验等。

我读过控制器代码应该尽可能短(据称它们是胶水代码部分)。

Q1:我有一些类似代码的库。这些库函数/类应该在相关的模型类中,还是我应该有额外的类来使用模型类?

Q2:如果我不需要额外的类(所以模型类就足够了),我应该从刀片文件还是从控制器调用这些业务逻辑? (控制器中的业务逻辑使它们变得非常庞大和复杂)。

示例:在控制器函数中,我使用查询评估后数据集。之后,我需要为每个帖子提供一些业务逻辑,例如effectiveValueOfPost($post)。我应该从控制器调用它并将其传递给相关视图,还是从刀片文件调用它。

谢谢。

【问题讨论】:

  • 你能提供你的例子的相关代码吗?

标签: laravel laravel-5


【解决方案1】:

我将根据当今的最新标准开始重构我的整个 Laravel 应用程序。这是一个理想的 Laravel 应用程序应该如何构建或创建。

注意:这些不是硬性规则,但如果您以这种方式构建 Laravel 应用程序以供将来更新,则会更容易维护。

控制器: 控制器应该有这些方法来创建、读取、更新和销毁特定模型。为简单起见,假设我们的模型是Product

  • index() - 它将返回产品列表。
  • create() - 它将显示一个创建模型的表单。 (如果需要)
  • store() - 它将存储来自创建表单的产品信息。
  • show() - 它将返回特定产品。
  • edit() - 它会显示一个表单来编辑任何产品。
  • update() - 它将更新任何特定产品。
  • destroy() - 它将删除特定产品。

路线:路线将遵循不同模型的相同模式。以下是特定模型(在本例中为产品)在控制器中调用上述给定函数的路由。

  • /products - GET - ProductController@index
  • /products/create - GET - ProductController@create
  • /products - POST - ProductController@store
  • /products/{id} - GET - ProductController@show
  • /products/{id}/edit - GET - ProductController@edit
  • /products/{id} - 补丁 - ProductController@update
  • /products/{id} - 删除 - ProductController@destroy

模型:现在,所有与数据库打交道的东西(查询、复杂查询、关系)都将存储在您的模型中(在本例中为 app/Product.php)。没有可以在模型中使用的指定函数。因此,您可以将所有查询和处理数据从查询中存储为模型中的函数。

视图:最基本的模型需要createeditindexshow 视图。在 views 目录中,您可以为不同的模型创建不同的目录。在这种情况下,在 views 目录中会有一个名为 products 的目录,它会包含所有上面给出的视图以及它可能需要的额外视图。

我在 Laravel 中处理过一些非常复杂的应用程序。这是我遵循的结构,以避免在创建或更新应用程序代码时出现任何混淆。我什至不必记住我为某些视图指定的随机名称,因为所有内容的结构都正确且完全基于控制器的名称。

有些控制器不需要所有这些路由和功能,在这种情况下,您仍然可以遵循此方法而不会感到困惑。

【讨论】:

  • 我在尝试找出重构代码的最佳途径时偶然发现了您的答案。所以我用 laravel 构建了我的第一个项目,并且一切正常。我只是觉得有些地方可以写得更好。看看你所说的,如果我理解正确的话,我的控制器中不应该有任何其他方法,而不是基本的 crud 方法?我在不同的控制器中有几种方法应该在我的模型中吗?用户按日期或类别过滤帖子,然后查询我的数据库。
  • @CIB 您当然可以在控制器中使用其他方法。不用担心。这样,您只能创建 CRUD 应用程序,但几乎所有应用程序都有一些优势,需要您在控制器中拥有许多不同的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多