Laravel本身是MVC架構的Framework,但隨著專案越來越龐大,若不把系統架構分工再切細一點,可能會導致日後維護的困難。
例如可能會很常發生controller要與model溝通拿資料,又要處理商業邏輯,就會導致controller越來越肥,因此本文要介紹的是如何加入Repository與Service這兩個概念。
簡單來說,我們可以把角色分工如下:
- Repository
與Model溝通取資料
- Service
處理商業邏輯
- Controller
接收request、檢查params與http response等等。
- Model
table relation相關
也就是說,當一個request進來之後,由Controller為進入點,把request參數往下帶給Service來處理商業邏輯,接著在Service內呼叫Repository,由Repository操作model object來取資料。
程式碼如下:
其中app\Repositories跟app\Services都是自己建的folder,Laravel本身並不會提供這兩個folder。
測試article api:
結論:
實務上建議看專案大小跟需求來決定是不是要切這麼細,並沒有強制規定架構一定要怎樣才叫好,這種東西其實很看個人,每個工程師設計出來的架構可能都不太一樣,但目標應該都是一樣的,為了提高可維護性。