热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Laravel框架开发是什么样的体验

在程序界的远古时期,大神们手持键盘敲着机器语言跟庞大的机器打着交道,那时候机器语言还没有语义和语法,更没有封装的概念。后来进化到汇编语言,C语言时期,基础的功能特性就已经能满足当时

《使用 Laravel 框架开发是什么样的体验》

在程序界的远古时期,大神们手持键盘敲着机器语言跟庞大的机器打着交道,那时候机器语言还没有语义和语法,更没有封装的概念。后来进化到汇编语言,C语言时期,基础的功能特性就已经能满足当时的需求了,比如函数封装使其得于复用,但随着计算机的普及,操作系统的到来,面向过程语言已无法继续满足复杂的需求。

历史的变迁促使了高级语言的诞生,到了我们这个阶段,已经是高级语言百花齐放的时代,Java、Python、Ruby、PHP、Javascript、Objective-C、Android 等等都在各自领域中发挥着重要的作用。而各大语言的框架更是集自身语言和其他优秀语言特性之大成者,以PHP来说,Laravel、Symfony、CodeIgniter、ThinkPHP 等都是其优秀的思想结晶之一,其中的 Laravel 就是其创始人 Taylor Otwell 结合了 Ruby on Rails 的思想开发出来的,并且以强大的框架生态和组件化思想成为全世界最热门的PHP框架没有之一。

随着近两年中文文档的完善,Laravel 渐渐被国内的开发者所使用,去年我们开始采用「组件化」思路来建设整个服务,业务重构选择了 Laravel 来作为后端的业务框架,到现在已经一年时间,我对 Laravel 框架也有了一些了解,从路由到单元测试,Laravel 几乎无所不能,它不局限于“神圣”的MVC模式,让开发者发挥自己的想象力去搭建自己想要的业务架构,不用再想着什么类要放在Model文件夹,而是怎么划分层次,每个层次需要干什么,就像是乐高积木,你可以根据图纸或者自己想象出的变形金刚的样子一层层的搭建出最后的模型。

在 Laravel 中,高级积木(组件)可以用 Composer 管理工具来引入,Composer 作为PHP中最好用的依赖管理工具之一(或许没有之一)已经被很多框架使用,就不详述它的故事了。绝大多数的 Laravel 组件都能在 Github 上找到,如果找不到肯定是你的搜索方式有问题,换了搜索方式还找不到,那就自己写一个。Composer 有这么一些常用指令:

  • composer install – 如有 composer.lock 文件,直接安装,否则从 composer.json 安装最新扩展包和依赖; composer update – 从 composer.json 安装最新扩展包和依赖;

  • composer update vendor/package – 从 composer.json 或者对应包的配置,并更新到最新;

  • composer require new/package – 添加安装 new/package, 可以指定版本,如: composer require new/package ~2.5.

我在引入和更新组件时都是使用 composer require ,这样子做的原因是因为在生产环境中使用其他两种方法来引入的话,会把其他组件也给更新了,导致不兼容的情况发生,具体看这篇文章:「正确的 Composer 扩展包安装方法」。

如果是 Composer 的「组件化」让我采用了这个框架来重构,那你就大错特错了,真正让我着迷的是 Laravel 的核心「Ioc容器」,它有效解决了对象依赖的问题,举个栗子:

要实例化一个孩子对象出来,必须要实例化出爸爸对象和妈妈对象,用原本的对象依赖调用方式就是这样的:

$father = new Father();
$mother = new Mother();
$child = new Child($father, $mother);

从编程角度来说,依赖关系越复杂,可变性就会越低,而且这么写等于暴露了三个对象给用户,是不可取的。

从现实角度来看,我只想知道你叫什么名字,你连你爸妈的信息都告诉我了,这……不合适吧。

上面的代码用 Laravel 来写会是这样:

$child = app()->make(‘Child’);

接着 Ioc 就会帮你调用依赖于 Child 的所有类,并且赋予 Child 对象,整个过程只需要一句代码,甚至能更简洁:

$child = app(‘Child’);

Ioc 的好用之处还有很多,基本上 Laravel 的基础服务都是围绕着 Ioc 来搭建的,Router、Middleware、Eloquent ORM等等等等,如果你想感受下 Ioc 的魔力,看源码吧。

在 Ioc 的基础上,各个子系统也有着自己的闪光点,Router 的 RESTful 定义,Eloquent ORM 的预加载查询优化等等让整个框架生态变得多样化和易用。但也因为应有尽有使得框架的性能比其他高性能框架低了些,Laravel 为此给了几个解决方案:

  • 路由缓存;经有关部门研究,路由缓存可有效加快访问速度500ms以上。

  • 源码缓存;把源码集合在一个类中,减少资源调用耗费的时间。

  • 数据查询优化;就是上面提到的 Eloquent ORM 的预加载查询优化。

这些都做了的话,性能不会差到哪里去,我认为中小体量的网站的瓶颈是在数据IO,PHP性能还不用太纠结,如果真达不到你的性能要求,请转用 Lumen 或者其他框架。

有朋友说 PHP 框架最重要的东西是路由,我倒认为最重要的是框架中异于其他框架且能解决痛点的东西,如 Laravel 的 Ioc。让我们改变编程思维是很少框架能做到的,Laravel 能做到这点,正所谓框架常有,好框架难求,如果你问我 Laravel 好不好,是不是最好,我只能用邓小平爷爷的名言告诉你:

不管黑猫白猫,捉到老鼠就是好猫。

点此查看我的更多文章。


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
author-avatar
民海育来仁湖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有