iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 23
2
Modern Web

使用 Laravel 打造 RESTful API系列 第 23

讓你的程式更美好 - Service 概念

  • 分享至 

  • xImage
  •  

使用Laravel 8 PHP主流框架打造RESTful API(iT邦幫忙鐵人賽系列書)ISBN:9789864345304

本系列文章已集結成冊與鐵人賽文章差異內容,有以下幾點:

更新至Laravel 8、基礎的PHP重點筆記、加強製作API流程細節、加入程式設計模式,優化、重構程式碼的部分,並且於書籍前面的章節介紹Git。

讓您從製作第一個簡單的API到優化自己的程式碼,分享我的經驗給您,打造自己的最強大腦API,若有興趣的朋友可以參考看看

天瓏網路書局:
https://www.tenlong.com.tw/products/9789864345304


此篇文章同步發於個人部落格

我自己的經驗呢!是把原生的PHP轉換成Laravel框架,那個時候最主要希望可以好維護,但是把權限啦~商業邏輯啦~全部都會寫在Controller 最後你就會發現

Controller 越來越大/images/emoticon/emoticon44.gif

Controller 越來越大/images/emoticon/emoticon24.gif

Controller 越來越大/images/emoticon/emoticon71.gif

如果又不是前後端分離的方式拆開的話,Controller 會非常非常亂。/images/emoticon/emoticon33.gif

之前就開始想辦法前後端拆開,所以開始研究RESTful API 的設計方式

至少有相對應的地方可以放置API

如果公司有前端的工程師就可以想怎麼改就怎麼改前端畫面,讀的到資料就好,也不會有重複撰寫相同性質的程式碼。

好了!Controller 很肥怎麼辦。這要怎麼辦呢?!/images/emoticon/emoticon72.gif 使用 Service 拆分部分程式碼/images/emoticon/emoticon76.gif

Service 模式

以下幾點都可以考慮把程式碼搬到 Service 檔案中

  • 牽扯到外部行為:如發送Email(Laravel有寫好的Mail實例可以使用),使用外部API...
  • 昨天有提到功能性的API用於確認折扣碼是否可以用的邏輯也可以拆
  • 或是電商平台有購買數量不同有優惠運費折扣的商業邏輯也可以拆

降低 Controller 程式碼的臃腫。

最主要的兩個原則外部服務商業邏輯,把他拆成 Service

明天開始依照這兩個原則把程式碼移出Controller吧!

題外話

還有人會再繼續細分再拆開來! 有專門寫查詢資料庫邏輯的地方 Repository 模式,減少 Model 的肥大,還有可以輔助 View 的部分 Presenter 模式,但可能小弟我碰到的系統還沒有到如此龐大的地步,感覺拆開來只是非常多檔案,檔案數量很大!

這是目前的看法,日後如果有更深一層的體悟!有機會再跟大家分享~

接下來先來安裝測試套件,明天先寫一點點測試

安裝VSCode 的PHPUnit測試套件

https://marketplace.visualstudio.com/items?itemName=recca0120.vscode-phpunit

這是台灣一位大大,Recca Tsai大大製作的套件!可以在VSCode 圖形化的介面執行測試

在VSCode套件搜尋框查詢 「phpunit」找到下方圖示顯示之套件並安裝

套件頁面

重新啟動 VSCode 可以在左側工具列看到像實驗室三角燒杯的圖示

套件畫面

點開來以後如上圖右方紅色框框,Laravel 已經有預設的測試程式(這時候記得伺服器是要有運行的狀態喔!),點選上方的三角形開始鍵!開始跑測試,測試通過就會像上圖一樣顯示綠色勾勾

有圖形介面!看起來真有成就感!好多綠勾勾 /images/emoticon/emoticon07.gif

明天先來撰寫 測試程式吧!


上一篇
進階 RESTful API 討論
下一篇
讓你的程式更美好 - 寫一點點測試
系列文
使用 Laravel 打造 RESTful API30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
阿展展展
iT邦好手 1 級 ‧ 2019-11-05 05:06:13

越來越大 /images/emoticon/emoticon25.gif

我要留言

立即登入留言