Laravel中CRUD和域模型对比有什么不同

  介绍

小编给大家分享一下Laravel中CRUD和域模型对比有什么不同,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

<强>对比CRUD和域造型

开始前,我们先来想想我们倾向于写足智多谋的CRUD控制器。我相信很多人会坚持使用这种做法,因为这是Laravel中的一个标准做法,文档中的大多数示例也是使用这种方法。另外,这或许也是你在各类博客或应用代码中经常看到的。

但是,如果你停下来思考一下,这是编写它们的最佳方法吗?是软件行业的一般性做法吗?最近几年,我在“领域驱动设计”(领域驱动设计)等领域投入了大量时间,并且思考软件如何应用于你工作的领域(域)以及它转化的过程。当您开始考虑模仿您领域中无处不在的语言的术语和措辞时,您会发现您的代码将变得更加清晰明了,更加戳到点子上。(最后这一句话仍值得斟酌,改进)

最后,我相信编写软件的本质是尽可能地应用域流程来让你的代码更加易读和更加可维护。

足智多谋控制器在这两个方面做得并不好。首先,它们不易读,因为您倾向于根据数据来构建它们,而不是根据领域来构建它们。这样的话,你就会丢失上下文对照。你表现了数据的处理方式,但却没有说明到底发生什么了,也没有说明你使用哪个过程进行处理。

第二,你没有针对可维护性进行优化。由于你是根据数据结构来构建的,因此你也会跟着耦合进去。实际上,您的领域模型在不断发展,数据结构也在不断发展。如果你的数据结构处理着多个过程或领域的多个部分,那你将很难进行调整。

<强>一个实际的例子

因为理论很无聊,上代码更加容易解释,所以我们来看一个实际的例子。

假设您正在构建一个应用,它允许用户去组织事件。您想提供一种创建,更新和删除这些事件的方法。这是一种非常典型的例子,你会用CRUD的方式来考虑实现它。那么,让我们看看就这样一个足智多谋的控制器是如何被转换的。

首先我们来看看路由:

路线::获得(& # 39;事件# 39;,,(EventController::类,,& # 39;指数# 39;]);   路线:get(& # 39;事件/创建# 39;,,(EventController::类,,& # 39;创建# 39;]);   路线::post(& # 39;事件# 39;,,(EventController::类,,& # 39;商店# 39;]);   路线:get(& # 39;事件/{事件}& # 39;,,(EventController::类,,& # 39;显示# 39;]);   路线:get(& # 39;事件/{事件}/编辑# 39;,,(EventController::类,,& # 39;编辑# 39;]);   路线::把(& # 39;事件/{事件}& # 39;,,(EventController::类,,& # 39;更新# 39;]);   路线::摧毁(& # 39;事件/{事件}& # 39;,,(EventController::类,,& # 39;破坏# 39;]);

现在对应的控制器:

& lt; php ?   namespace 应用\ Http \控制器;   use 应用\ \事件模型;   final  class  EventController   {   ,,,public  function 指数()   ,,,{   ,,,,,,,//,…   ,,,}   ,,,public  function 创建()   ,,,{   ,,,,,,,//,…   ,,,}   ,,,public  function 商店()   ,,,{   ,,,,,,,//,…   ,,,}   ,,,public  function 显示(Event 事件美元)   ,,,{   ,,,,,,,//,…   ,,,}   ,,,public  function 编辑(Event 事件美元)   ,,,{   ,,,,,,,//,…   ,,,}   ,,,public  function 更新(Event 事件美元)   ,,,{   ,,,,,,,//,…   ,,,}   ,,,public  function 破坏(Event 事件美元)   ,,,{   ,,,,,,,//,…   ,,,}   }

这个EventController处理所有的CRUD请求,展示事件列表,展示指定的事件,创建一个事件,更新一个现存的事件和删除一个事件。

来看看指数方法的细节:

public  function 指数()   {   ,,,events 美元;=,事件:随意翻阅(10);   ,,,return 视图(& # 39;events.index& # 39;,,紧凑(& # 39;事件# 39;));   }

在这个方法中,我们检索出事件们,然后交给视图让它去展示到一个分页列表中。到目前为止都还好。但是你现在想实现一个方法,用不同的页面去查看过去和即将来的事件。让我们看看如何在指数方法中实现它:

public  function 指数(Request  $请求)   {   ,,,if (美元请求→布尔(& # 39;过去# 39;)),{   ,,,,,,,events 美元;=,事件:过去()→随意翻阅(10);   ,,,},elseif (美元请求→布尔(& # 39;即将# 39;)),{   ,,,,,,,events 美元;=,事件:即将到来的()→随意翻阅(10);   ,,,},{else    ,,,,,,,events 美元;=,事件:随意翻阅(10);   ,,,}   ,,,return 视图(& # 39;events.index& # 39;,,紧凑(& # 39;事件# 39;));   }

Laravel中CRUD和域模型对比有什么不同