如何整理我的代码?

时间:2015-05-01 15:44:57

标签: laravel optimization architecture laravel-5


我还处于PHP和Laravel 5的学习阶段,自从我升级到L5后,我在代码所属的地方挣扎。有这么多文件和文件夹似乎具有相同的目的或至少非常相似。有命令,控制器,事件,服务,请求等。我举例说明我的工作流程以及放置代码的地方,我希望你们可以发表评论并纠正/帮助我。

情况

我想在我的应用程序中注册一个新用户,并在他成功注册后发送欢迎电子邮件。


工作流

  1. Controller(UserController):返回请求的视图(注册)。
  2. 请求(RegisterRequest):“RegisterRequest”验证输入的数据。
  3. 控制器(UserController):将经过验证的数据传递到“应用/服务”中的“UserRegistrar”(服务)。
  4. 服务(UserRegistrar):创建新用户并将其保存到数据库中。
  5. Controller(UserController):触发“UserWasRegistered”事件。
  6. 事件(UserWasRegistered):此事件调用“SendWelcomeEmail”命令。
  7. 命令(SendWelcomeEmail):此命令将发送/排队欢迎电子邮件。
  8. 控制器(UserController):将用户重定向到一个视图,其中包含已成功注册的信息以及已向其发送消息。

  9. 逻辑

    好的,我们来讨论一些逻辑:

    • 控制器:
      • 没有太多代码。
      • 主要是返回视图(包含请求的数据)。
      • 处理工作流程并“连接”模块(服务,请求,事件)。
    • 请求:验证指定请求的数据

    • 服务:服务“做”某事。例如,它正在向数据库发出请求。

    • 事件:如果被触发,事件是调用一个或多个任务的中心位置(SendConfirmationMail,SendWelcomeMail)。
    • 命令:主要用于处理某个特定任务的逻辑。例如发送确认邮件。另一个命令将保存发送欢迎邮件的逻辑。这两个命令都在之前描述的事件中调用。
    • 存储库: 这是什么?!

    所以这就是我的理解。请帮助我,并向我提供信息。

    谢谢, LUMA

1 个答案:

答案 0 :(得分:3)

你的问题有点模糊,可能会因为“过于宽泛”而引起人们的反对。那就是说,这是我对此的看法......

我看到的最大问题是你的应用程序结构与推荐的L5结构 - 甚至是标准的MVC结构 - 非常不同,难怪你会感到困惑。

让我们谈谈你的“逻辑”部分:

  • 控制器 - 您在这里正确的方向。控制器是模型和视图之间的粘合剂。它可以执行某些处理,但大多数应该卸载到处理特定任务的类。

  • 请求 - 这是什么? L5包括Request类,其中包括检查从客户端接收的HTTP请求的方法。你在谈论继承那个吗?为什么?如果您对“请求”类的想法主要与检查输入有关,那么您可以在模型中执行此操作(即,在将其粘贴到数据库之前验证内容)或在控制器中执行(请参阅L5 docs on controller validation)< / p>

  • 服务 - 再次,这是什么?您谈到“向数据库发出请求”,但L5为此提供了一个类(DB)。在更高级别,数据库访问应主要通过模型完成,这些模型抽象出大多数低级数据库访问。至于其他服务,我通常做的是创建来执行特定处理。例如,我的应用程序有一个特定的第三方项目管理应用程序,它通过API访问。我有一个库,使用getProjectcreateProject等方法。

  • 事件 - 事件是一种确保在事件发生时调用某些代码的方法,而不会产生太多麻烦。听起来你对事件有正确的想法。

  • 命令 - 再次,听起来您对命令有基本的了解。

  • 存储库 - 这些是抽象资源(主要是数据库,但它也可以应用于其他资源)和使用该资源的代码之间的连接的方式。如果您(例如)决定在将来更改数据库服务器,这将提供一种更轻松地切换底层资源的方法。它们是可选的。

您还没有提及任何关于模型的内容。 L5提供了一种通过Eloquent模型以易于理解的方式处理数据的绝佳方式 - 这将使您的生活更多更容易。

我的建议是:从小做起。使用L5构建一个简单的MVC应用程序 - 一个模型(用于保存一些数据),一个视图(用于显示数据)和一个控制器(通过处理客户端请求将模型和视图放在一起)。一旦你有了,就开始扩展它。

有一些教程可以为你提供Laravel的这个基本结构 - 大部分是Laravel 4,但看看你是否可以按照基本的想法为Laravel 5构建类似的东西。