如何组织我的代码?

How to organize my code?


我仍处于 PHP 和 Laravel 5 的学习阶段,自从我升级到 L5 后,我一直在为我的代码所属的位置而苦苦挣扎。有如此多的文件和文件夹似乎具有相同的用途,或者至少非常相似。有命令、控制器、事件、服务、请求等。我给出了我的工作流程示例以及代码放置位置,我希望你们和 correct/help 我可以对此发表评论。


情况

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


工作流程

  1. 控制器(UserController): Returns请求查看(注册)。
  2. 请求(RegisterRequest): "RegisterRequest" 验证输入的数据。
  3. 控制器(UserController):将经过验证的数据传递给'App/Services'中的"UserRegistrar"(服务)。
  4. Service (UserRegistrar):创建一个新用户并将其保存到数据库。
  5. 控制器 (UserController): 触发 "UserWasRegistered" 事件。
  6. 事件 (UserWasRegistered): 此事件调用 "SendWelcomeEmail" 命令。
  7. 命令 (SendWelcomeEmail): 此命令将 send/queue 欢迎电子邮件。
  8. Controller (UserController): 将用户重定向到一个视图,其中包含他已成功注册并已向他发送消息的信息。


逻辑

好吧,让我们讨论一些逻辑:


这就是我的理解。请帮助我并为我提供信息。

谢谢, 鲁马

您的问题有点含糊,可能会因为 "too broad" 而引起反对票。也就是说,这是我对此的看法...

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

让我们谈谈你的 "Logic" 部分:

  • controller - 你在正确的轨道上。控制器是模型和视图之间的粘合剂。它可以进行 一些 处理,但大多数应该卸载到处理特定任务的 classes。

  • 请求 - 这是什么? L5 包含一个 Request class,其中包含用于检查从客户端收到的 HTTP 请求的方法。您是在谈论 subclassing 吗?为什么?如果您对 "request" class 的想法主要与检查输入有关,您可以在您的模型中执行此操作(即在将其粘贴到数据库之前验证内容)或在您的控制器中执行此操作(请参阅 L5 docs on controller validation)

  • service - 再说一次,这是什么?你说的是 "doing requests to the database",但 L5 提供了一个 class (DB)。在更高的层次上,数据库访问应该主要通过模型来完成,模型抽象掉了大部分低层次的数据库访问。至于其他服务,我通常做的是创建libraries来进行特定的处理。例如,我的应用程序有一个特定的第三方项目管理应用程序,它通过 API 访问。我有一个库,其中包含 getProjectcreateProject.

  • 等方法
  • event - 事件是一种确保在事件发生时调用某些代码的方式,而不会造成大量混乱。听起来你对事件的看法是正确的。

  • command - 同样,听起来您对命令有基本的了解。

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

你也没有提到任何关于 models 的事情。 L5 提供了一种通过 Eloquent 模型以可理解的块处理数据的绝佳方法 - 这将使您的生活 更轻松。

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

那里有一些教程可以为您提供 Laravel 的基本结构 - 大多数是 Laravel 4,但看看您是否可以遵循基本思想并为 [=79] 构建类似的东西=].