怎样注册优酷账号错误代码2003-28怎么解决?

Laravel 的中大型专案架构 - 凝聚博客
.pre{float:height:40line-height:40background:#5cb85c;color:padding:0 5}
.pre a{color:}
blockquote{border-left:5px solid #6ce26c;background:#fdf6e3;}
Laravel 的中大型专案架构
JaguarJack&发表时间:
只有MVC是不够的,我们需要更完整的专案架构初学者学习Laravel时分两种,一种是乖乖的将程序填入MVC架构内,导致控制器与模式异常的肥大,日后一样很难维护;一种是常常不知道程式不决,毕竟传统PHP都是一个页面一个档案。本文整理出最适合Laravel的中大型专案架构,兼容容易维护,容易扩充与容易重复使用的特点,并且容易测试。VersionLaravel 5.1.24控制器过于肥大受RoR的影响,初学者常认为MVC架构就是model,view,controller:模型就是资料库。控制器负责与HTTP沟通,调用模型与视图。查看就是HTML。假如依照这个定义,以下这些需要写写在哪里呢?& & 1.发送电子邮件,使用外部API。& & 2.使用PHP写的逻辑。& & 3.依需求将显示格式作转换。& & &4.依需求是否显示某些资料。& & &5.依需求显示不同资料。其中1,2属于商业逻辑,而3,4,5属于显示逻辑,若依照一般人对MVC的定义,model是资料库,而view又是HTML,以上这些需要都不能写在model with view,勉强写在控制器。因此初学者开始将大量程式写在控制器中,造成控制器的肥大难以维护。模型过于肥大&既然逻辑写在控制器不方便维护,那我将逻辑都写在模型就好了?当你将逻辑从控制器搬到模型后,虽然控制器变瘦了,但却肥了模型,模型从原本代表资料库,现在变成还要负担商业逻辑与显示逻辑,结果更惨。模型代表资料库吗?把它想成是Eloquent类就好了,资料库逻辑应该写在仓库里,这也是为什么Laravel 5已经没有模型目录,Eloquent类仅仅是放在app根目录下而已。中大型专案架构那我们该怎么写呢?别人将我们的思维局限在MVC内:模型:只当成Eloquent类。存储库:辅助模型,处理资料库逻辑,然后注入到服务。服务:辅助controller,处理商业逻辑,然后注入到controller。控制器:接收HTTP请求,调用其他服务。Presenter:处理显示逻辑,然后注入到视图。查看:使用刀片将资料绑定到HTML。其中蓝色为原本的MVC,而紫色为本文要介绍的重点:Repository模式,Service模式与Presenter模式。箭头表示物件依赖注入的方向1关于依赖注入,详细请参考深入探讨依赖注入我们可以发现MVC架构还在,由于SOLID的单一职责原则与依赖反转原则:我们将资料库逻辑从模型分离出来,由库辅助模型,将模型依赖注入进入仓库。我们将商业逻辑从控制器分离出来,由服务辅助控制器,将服务依赖注入进入控制器。我们将显示逻辑从视图分离出来,由演示者辅助视图,将演示者依赖注入进度视图。建立目录在应用程序目录下建立Repositories,Services与Presenters目录。&别害建立目录!别害怕在Laravel预设目录以外建立的其他目录,根据SOLID的单一职责原则,类功能越多,责任也越多,因此越违反单一职责原则,所以你应该将你的程式分割成更小的部分,每个部分都有它专属的功能,而不是一个类功能包山包海,也就是所谓的万能类别,所以整个专案不应该只有MVC三个部分,放手根据你的需求建立适当的目录,并将适当的类放到该目录下,只要我们的类有命名空间帮我们分类即可。Repository由于篇幅的关系,将库独立成专文讨论,?Service由于篇幅的关系,将服务模式化,Presenter由呈篇的关系,将演示者独立成专文讨论,单元测试由于现在模型,视图,控制器的相依物件都已经拆开,也都使用依赖注入,因此每个部分都可以单独的做单元测试,如要测试服务,就将仓库加以模拟,也可以将其他服务加以嘲笑。演示者也可以单独跑单元测试,将其他服务加到模拟,不一定要跑验验测试才能测显示逻辑。结论本文谈到的架构只是开始,你可以依照实际需要增加更多的目录与类,当你发现你的MVC违反SOLID原则时,就大胆的将从类MVC拆开重构,然后依照以下手法:建立新的类或接口。将相依物件依赖注入到类。在类内处理他的职责。将class或interface注入到controller或view。最后搭配单元测试,测试重构后的架构是否与原来的需求结果相同。在 Laravel 5 中使用 Repository 模式实现业务逻辑和数据访问的分离
这篇文章对我很有帮助
这篇文章对我很有帮助
学院君 has written
资深PHP工程师,Laravel学院院长

我要回帖

更多关于 优酷错误代码31910 的文章

 

随机推荐