Day 3 - 如何运用Laravel框架设计模式规划大型专案

Laravel是基於MVC架构设计出来的框架,
什麽是MVC(Model–View–Controller)? 简单来说就是把复杂度简化,让每个结构各别分工,大家都有特定的职责

  1. Model: 专门做资料库处理,可以透过Model对资料库进行新增、删除、修改、查询等动作,而不需直接下SQL语句,举例来说如果没有Model,那你原本查询资料要这样
select 'user_name' from users where 'class_name' = 'A'

有了Model後

use App\Models\User;

User::select('user_name')
    ->where('class_name', '=', 'A');

在这个例子当中感受到的效果可能没有很显着,但当SQL语句复杂的时候就可以深刻体会到Model带来的好处.

  1. View: Laravel利用Blade产生html文件,用来显示肉眼所能见的到画面,在 /resources/views 目录下可以看到一个welcome_blade.php预设档,就是我们启动docker後浏览 http://localhost, 所看到的画面

  2. Controller: 当使用者浏览你的网站比方说http://localhost/user, 如果经过一些设定,Route会帮我们去找到UserController,这时Controller可以决定要取得什麽资料,并回传什麽 View.

MVC流程图

虽然Laravel已经帮我们做了上述的分工,但是当专案一大,可能会有一大堆程序码都挤在Controller之类的情形发生,这边要介绍一个套件,方便我们快速规划架构
https://packagist.org/packages/yish/generators

$ sail composer require yish/generators

$ sail artisan make
Did you mean one of these?
    make:presenter
    make:service
    make:repository
    make:transformer
    ...

遇到的问题:Controller负责资料逻辑处理,又要负责View与Model的沟通,导致Controller太过肥大
解决方法: 把原本的架构改成这样
https://ithelp.ithome.com.tw/upload/images/20210918/20124802gTyNzzYd3x.png

  1. Model: 资料库处理
  2. View: 画面显示
  3. Controller: 只专注於当个沟通桥梁
  4. Service: 负责资料逻辑处理,帮Controller分担工作
  5. Repository: 在Repository处针对资料库做处理,分担Service工作,让Service只负责做资料的逻辑处理
  6. Transformer: 当输出结果相对复杂时,可建立一个Transformer专门处理输出结果,视需求加入.
  7. Presenter: 当在View的blade需要做一些复杂判断(if/else)时,可以建立一个Presenter,处理这些资料的操作,并在blade中使用@inject(),来引入Presenter,视需求加入.

在之後的文章当中,我会直接用这个架构来撰写这次的专案,想对架构有更深了解的可以关注我并留意之後的文章.

参考文章
https://www.esparkinfo.com/why-laravel-is-the-best-php-framework.html


<<:  未知的第四天 -新增页面

>>:  Proxmox VE 版本升级设定

React-依视窗大小改变DOM

在class component上 一开始必须得在construtor上导入state判断视窗大小 ...

CRC-8-CCITT

CRC-8-CCITT SMBus PEC /* https://en.wikipedia.org/...

Java 开发 WEB 的好平台 -- Grails -- (3) 建立一个 SPA 的 Grails 专案

或许有人会问「那我要开发 SPA 网站时,要如何跟 Grails 搭配呢?」。这个问题的答案很简单,...

[2021铁人赛 Day06] General Skills 03

引言 昨天学到的: 命令 简介 命令 --help 查看命令使用说明 今天的题目正好与 --hel...