拿出您的倒數計時器,計時30分鐘
目的:今天希望可以跟您一起達成一個URL 以及 Controller 擺放在專案的哪裡,比較好維護。
達成共識也是就是說,團隊的開發中,如果可以有達成一個共識,可以在不同人在維護時,可以比較快速的找到,需求應該在哪裡修改。
Controller 怎麼分?
新手一開始都會在同一個Controller新增很多個方法,並且把所有的流程程式都塞在這個Controller 類別的檔案中,導致這個Controller 非常多,這樣會非常不容易維護。
假設系統當中有四大分類,客戶、管理、銷貨存、系統設定,千萬不要在專案中只建立這四個Controller,這樣這四個Controller很可怕。
建議可以依照 資源 來分 Controller,例如《使用Laravel 8 PHP主流框架打造RESTful API(iT邦幫忙鐵人賽系列書)》書中有提到 Animal 資源,專門在操作Animal 資料表的Controller 新增刪除修改的檔案。
裡面每一個方法都對應的一個URL。
Create 方法對應到建立動物的那個操作畫面,可以 小練習 – 共識 Controller function 這篇文章,如果您都理解裡面的內容。
接著就是要說明Controller與URL,存放在哪個資料夾的關係。
在《使用Laravel 8 PHP主流框架打造RESTful API(iT邦幫忙鐵人賽系列書)》書中 18-5 頁有簡單提到,現在更全面一點的補充。
是以同一個專案當中,如果有前後端,
App\Http\Controllers 資料夾中存放的是包含前端網頁的處理 小練習 – 共識 Controller function 這一篇有提到。
App\Http\Controllers\Api\V* 裡面存的是不同版本的,API Controller
接下來建議再加一層資料夾 App\Http\Controllers\Animal\AnimalController.php ,這個網址 127.0.0.1/animals 的所有事。
方法名稱 | 定義 | 備註 |
index | 列表那一頁顯示的畫面。 | |
create | 建立 Animal 操作的那個畫面。 | |
store | 使用者在建立Animal資源的儲存進入資料庫的動作。 | |
show | 顯示一單動物資源的畫面。 | |
edit | 更新單一動物資源的畫面。 | |
update | 更新但一動物資源進入資料庫的動作。 | |
destroy | 移除一個動物資源的動作。 |
為什麼要多一層,因為系統會越來越複雜,假設你想做一個網址是 127.0.0.1/animals/{animal}/users ,建議將controller 存在上一課動物的controller同一個資料夾 App\Http\Controllers\Animal\AnimalUserController.php 新增一個 AnimalUserController.php
方法名稱 | 定義 | 備註 |
index | 該動物 {animal} 跟哪些user有關係的那一頁列表顯示的畫面。 | |
create | 建立 Animal 與 User 關係的那個畫面。 | |
store | 使用者在建立Animal資源與User資源儲存進入資料庫的動作。 | |
show | 這個就跟查看user 資料一項,看有沒有需要實作。 | |
edit | 這個就跟編輯user 資料一項,看有沒有需要實作。 | |
update | 這個就跟更新user 資料的動作,看有沒有需要實作。 | |
destroy | 移除一個Animal 以及 User 的關係的動作 |
因此才會建議你 App\Http\Controllers 多一層 資料夾,例如上面所提到的,這樣比較好擴充,目前 App\Http\Controllers\Animal 資料夾中有
- AnimalController.php
- AnimalUserController.php
兩個檔案,一個專門在處理 Animal資源,另一個定義專門在處理 Animal 與User資源的關係。
以上講的都是前後端是在一起的部分
如果你想猜開來,我想這是蠻多公司再把原本專案專程前後端分離會遇到的事情,或許可以先將,動作 拆。
剛剛有提到資料夾 App\Http\Controllers\Api\V* 這個資料夾專門來存放API,假設網址依照RESTful 規範去製作, 127.0.0.1/api/v1/animals/{animal},那麼這一組網址的動作應該放在哪裡呢?
答案揭曉
App\Http\Controllers\Api\V1\Animal\AnimalController.php
你想對了嗎?道理是一樣的,這個AnimalController 專門負責 V1 版本的 animals 資源的API操作,查看列表資料(不是做那個畫面,只是單純回傳列表資料)、新增、刪除、修改這些動作,Controller中的方法,就如同我 《使用Laravel 8 PHP主流框架打造RESTful API(iT邦幫忙鐵人賽系列書)》書中有提到,就不在額外贅述了!
感謝你們的觀看,可以達成共識,再多人維護的團隊中,會比較容易找要修改的地方在哪裡,假設你接到了一個需求,希望可以在修改動物資料的時候,新增一些其他操作。
就可以很輕鬆的去判斷,如果要動到畫面,可以找
App\Http\Controllers\Animal\AnimalController.php 的 edit 方法
可以再確認一下,這個修改的動作,是請求哪一個網址,假設是請求未拆分前後端的網址,可以開啟
App\Http\Controllers\Animal\AnimalController.php 的 update 方法
如果已經到慢慢前後端分離的狀態,或許要修改的地方是
App\Http\Controllers\Api\V1\Animal\AnimalController.php 的 update 方法
整個效率上會大大提升,產生共識後我覺得可以帶來的好處,就跟為什麼要使用Laravel 一樣,已經有規範好一些地方,大方向都有了!其他像這樣的細部細節的共識,所覺得如果團隊越來越大,應該要定義一下。