Laravel 实战经验分享 - Day29 剩下最後的两篇,该讲些什麽呢?

到了倒数第二天,一直在想自己该写什麽,在参加这个比赛之前,自己常埋首在自以为是的开发中,无论遇到什麽问题就是不断地的解决 bug,并制造更多 bug,很少会去找这些问题的源头,也很少会去了解 bug 的发生原因,但这个写文章的自我挑战,让我自己看到在技术能力上的盲点以及不足,在翻阅官方文件时,总会看到一些自己在开发上错误的用法,原来我已落入了达克效应的过度自信区却不自知,以前总认为框架是套工具,可以利用它快速建立专案,但是像 Laravel 这种设计完整的後端架构,若不照着它的规范进行开发,不过就是在把自己的脏 code 丢到框架上,反而不够简洁(对,我说的就是把所有功能和业务逻辑都写在 Controller 的你我),失去这个框架当初被设计出来的初衷。


达克效应,图片来源:陈品皓临床心理师 粉丝专页

不过想像自己正在往累积更多技能及经验的方向前进,还是很令人兴奋的。

盘点一下自己在开发的时候常会犯的错

这边主要是希望能够记录一下自己在开发专案的时候常会犯的错误,作为警惕。

  1. 写作风格不按照 PSR 规范
    PSR(PHP Standards Recommendations)是 php-fig 提出的 PHP 程序写作风格,其实不按照这个风格写作也没差,程序大部分都还是跑得动,但是当你的专案越来越大,且越来越多开发人员加入时,会导致风格不一,难以维护,如果去看 Laravel 的原始码,可以发现他们的写作风格都有依照这个规范。

  2. 过度依赖资料库管理工具
    phpmyadmin 或是我常用的 DBeaver 都是相当方便用来操作资料库的工具,但过度依赖这些工具,且不了解底层资料库操作语法,很容易让你在误改资料库结构时改不回去,另外 Laravel 也有提供 Migration 这个方式建构你的资料表,因此如果要见资料表或是修改架构,都建议使用 Migration 统一操作。

  3. Migration 不只写 up,更要写 down
    资料表怎麽建的就要怎麽 rollback,我也曾看过不写 rollback 的专案,维护起来很痛苦,因为当我要修改架构,在确认的时候 rollback 要嘛没用要嘛喷错,因此大家还是要了解这个方法被设计的目的是什麽,不要只会使用一半的功能,这样很可惜。
    过去也有一个问题是专案越来越大,Migration 档案就会越来越多,这个问题在今年九月推出的 Laravel 8 有了解答,Migration Squashing 利用指令 php artian schema:dump --prune,让你在修改资料库结构後将 Migration 档案全 dump 成 .sql 档案,并且清掉 Migration,之後再执行 php artisan migrate:fresh 时,也会先执行这个 dump 出来的档案,再执行新的 Migration 档案,并且加入到 .sql 档中,可以说是解决了 Migration 一直以来的一个大问题。

  4. 过度依赖 Laravel Helpers
    Laravel Helpers 封装了很多 PHP 的原生函式,让你在使用 Laravel 时与其他的语法更贴近,且更加方便,不过既然他多封装了一层,因此多少牺牲了一些些效能,而且许多人在公司可能不只维护 Laravel 专案,可能有些专案是使用其他框架或是纯 PHP 写的,反而导致你不容易习惯使用原生的 PHP 用法。记得,我这边都是讲不要过度依赖,并不是说这些工具不好,而是要晓得这些工具使用的原因以及目的,才不会让自己陷入达克效应的自信(蠢)区间。

  5. 功能、业务逻辑全部都写在 Controller
    这也是我刚学 Laravel 等 MVC 框架会发生的问题,因为实在太方便,只好都写在一起,程序就神奇的动起来了,但是 Laravel 有提供很多的方式处理不同需求,如要检查进入 Routes 的请求,可以利用 Middleware;要写抽象的业务逻辑,可以利用 Service Providers 等等。Controller 可以专心处理 Model 与 View 的请求及资料就好。

  6. 不写测试
    人工测试也许比较贴近人,但很浪费时间,你总不可能在加入新功能时,还要测试登入功能有没有依赖问题吧,所以一些已经开发完成的功能都建议将测试写完整,这样在专案上 Production 时也能保证没有问题。

  7. 明明是 RDBMS 系统,资料库却不设关联
    Migration 真的很方便,你要设定外键跟 Index 都不会太难,所以花点时间把资料库关联建好是必要的,如果只使用 Eloquent 提供的关联功能是不且实际的,应该两个地方都要做。


以上是目前开发 Laravel 专案时曾踩过的雷以及心得,希望对大家有帮助,这类的文章可以参考 Recca 大大的铁人赛文章 - 如何用 Laravel 撰写难以维护的专案


<<:  Day29 Flutter Persistence

>>:  拯救资工系学生的基本素养—怎样写图形介面应用程序

DAY25 深度学习-卷积神经网路-Yolo v3

今天介绍一下Yolo v3, 首先在v3中使用了darknet-53的架构,架构如下图: 相比v2的...

Day25 ( 游戏设计 ) 翻转吃豆子

翻转吃豆子 教学原文参考:翻转吃豆子 这篇文章会介绍如何使用「旋转感测」、「创建角色」、「得分」、「...

Day 5 - 如果有如果

前言 上次介绍了变数是甚麽?这次就来说明程序的一些功能吧!所以为什麽我们需要使用程序语言,为甚麽不直...

容器化的安全原则(the security principles of containerization)

-容器技术架构 容器映像是由开发人员创建和注册的包,其中包含在容器中运行所需的所有文件,通常按层组...

Day 2 云端上的资料流

云端的分类 第一次点开AWS官网( https://aws.amazon.com/ )或许会有点眼花...