资讯专栏INFORMATION COLUMN

Laravel 中设计模式的实战分享

李义 / 3388人阅读

摘要:如何在实战中能应用上设计模式,我思考了接近两年。最开始我接触设计模式,出发点就是为了重构代码,以便更好的复用和测试。也就是说基本是被当成一组静态函数使用的。

MVC是Laravel自带的,大家也多少都会用一些。今天我们不谈MVC,谈一些大中型项目的设计思路。


前言

虽然标题说是设计模式,但是我并不打算去讲什么singleton、strategy、factory,不知道为什么,每次看到这几个词汇,我就昏昏欲睡。我个人认为,在非Java语言中,用这些模式很别扭。我曾经尝试过在Unity项目中,使用设计模式,但是总觉得是为了模式而模式,根本不能起到我想要的作用。今天在市图书馆,我很努力的想找到一本在PHP或者Laravel环境下,讨论设计模式的书,可是没找到。

起点

我相信很多人学设计模式,都是跟我一样,听说这玩意高大上。但是只学了前三个,也就是上文那三个,之后的就是在梦中学的了。如何在实战中能应用上设计模式,我思考了接近两年。最最禁忌的是,强行在代码中使用某个模式,经常会弄巧成拙,还毁了之前的代码。最开始我接触设计模式,出发点就是为了重构代码,以便更好的复用和测试。但是直到最近,也就是写上一篇博客的不久前,我才明白到底该怎么做。

上路

Laravel中自带MVC,但是我目前的项目已经突破一万行,MVC早已不堪重负。后来我决心去找一些架构设计,重新整理一下代码,顺利的找到了这个浅显易懂的blog,里面附带三篇独立的文章,分别讲解了三种模式:Service、Repository、Presenter。不过我实在太笨了,这样都理解不了,一开始强行去写,写着写着,才慢慢理解。过程中发现了Laravel-5.3-Repository,用命令行创建repository文件,稍加修改可以改出一份创建service文件的命令。以及laravel-auto-presenter,可以直接将presenter对象注入到model中,当做model原有属性的替代品(比如重写默认的icon属性,附加上img标签等)。但是这个库不支持自定义函数,只能用来替换以后属性。最后还有这个库laracasts/presenter,这个是我目前在用的,以trait模式使用,通过调用$foo->present()->customContent()来使用,只能调用自定义函数,不支持重写已有属性。

终点?

今天写着写着,突然有所感悟。都说repository模式可以方便测试,我现在才明白具体要怎么做。在controller或者sevice中调用repository的时候,一定要把变量在调用的时候传入,这样后续可以写单元测试,只通过变量就能测试repository是否正确,而不用每次都通过request传入参数来测试。也就是说repository基本是被当成一组静态函数使用的。

抛砖引玉,希望大家都能讨论下,在具体项目中都是怎么设计的,我也在学习的阶段,欢迎回复交流。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26037.html

相关文章

  • deployer 实战经验分享

    摘要:开发完项目,免不了要部署上线。进行部署的过程中,项目仍然能够正常访问。能十分方便地进行回滚。线上测试与生产使用的是青云的云主机,系统。或者想办法设置实现免密码登录。 开发完项目,免不了要部署上线。纯手动操作,登录、拉代码、改配置、清缓存、各种服务重启等等一条龙下来,人生宝贵的几分钟就过去了。而且手动操作十分容易出错,遗漏部分步骤都有可能产生一些邪门问题。所以我很早就开始寻求一种能轻松部...

    cangck_X 评论0 收藏0
  • AI开发书籍分享

    摘要:编程书籍的整理和收集最近一直在学习深度学习和机器学习的东西,发现深入地去学习就需要不断的去提高自己算法和高数的能力然后也找了很多的书和文章,随着不断的学习,也整理了下自己的学习笔记准备分享出来给大家后续的文章和总结会继续分享,先分享一部分的 编程书籍的整理和收集 最近一直在学习deep learning深度学习和机器学习的东西,发现深入地去学习就需要不断的去提高自己算法和高数的能力然后...

    huayeluoliuhen 评论0 收藏0

发表评论

0条评论

李义

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<