iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
Software Development

全端開發包括測試自己一條龍!系列 第 3

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


上一篇
Day 2 - 如何運用sail快速建置Laravel 8.0
下一篇
Day 4 - 介紹Laravel Eloquent ORM
系列文
全端開發包括測試自己一條龍!10

尚未有邦友留言

立即登入留言