1. 程式人生 > >打造 Laravel 優美架構 談可維護性與彈性設計

打造 Laravel 優美架構 談可維護性與彈性設計

我的github部落格:zgxxx.github.io/

公司專案可能需要對架構進行重建,老大給了我一個視訊讓我學習裡面的思想,看完後覺得收穫很大,主講人對laravel專案各個層次有很清晰的理解,力求做到職責單一分明,提高可維護性。下面是我看完視訊對其內容的大概整理,以及一些自己的見解,有錯誤的請指出。 視訊:www.youtube.com/watch?v=pzY… (有牆各位懂的)

Laravel簡單架構:

avarar

簡單的小專案可能會把資料庫查詢,業務邏輯,資料傳給View幾乎所有操作都放在Controller,如何專案後期需求變大,最後Controller會變得很臃腫,難懂,不易維護(同樣,有些會把所有增刪改查,功能類寫在Model,Controller再從Model一個個的拿,導致Model很亂,Model有關聯表的時候可能會引起一些不必要的資料庫查詢)

我自己的理解:用美宜佳賣商品給客人來理解,主要Controller是某個加盟商美宜佳門店,View是客人,Model是商品製造工廠(理解有些粗糙)

Repository(商品倉庫):

跟Eloquent/DB操作相關的,例如增刪改查,直接和資料庫打交道的基礎操作抽出來放在Repository中,repository中文是倉庫,我的理解就是我們要從Model拿資料,先放在倉庫repository中,統一由倉庫管理分配,發揮倉庫的職責

avarar
avarar

Service (總部服務平臺):

商業邏輯,不是簡單的查詢資料,而是特定的任務,例如判斷使用者是否是會員,設定使用者許可權等等,這些操作建議放在Service,之後Controller再呼叫它

avarar
avarar

**個人理解:**所以在Controller和Model/Eloquent中間墊兩層,如果Repository理解為商品倉庫的話,我的理解Service是類似總部內部的服務平臺,加盟商Controller需要拿商品給客人View,不能直接去食品工廠Model拿,先通過倉庫repository,然後總部服務平臺Service進行打包啊,整理啊,發車啊(各種任務),最後再給到加盟商Controller手裡

avarar

Presenter(充值業務):

一些比較固定,可以單獨呼叫的,可以用Presenter抽出來,不需要讓Model去做,下次修改也單獨修改Presenter就行了, 例如時間戳轉成Y-m-d H:i:s格式,可以單獨用Presenter處理後用@inject插入到前端模板,而不是把轉化過程寫在模板上面

avarar
avarar
avarar
**個人理解:**所以在Controller和View中間可以加一層Presenter,我的理解有點類似:美宜佳商戶(Controller)可以給客人(View)充公交卡,這種小事不需要勞費工廠(Model)
avarar

Transformer(快餐小吃人工篩選):

轉換器,例如在倉庫repository中有一個獲取所有使用者資訊的查詢操作:this->user->all();
但有些地方我們不需要用到那麼多個欄位,我只想有name和email欄位,難道我要去改all()裡面的引數,變成this->user->all(['name','email'])? 這樣另外的地方又要全部欄位,這不就衝突了?這時候Transformer就有用了,其實原理是對$this->user->all()獲得的資料進行篩選後再輸出,加了個篩選器。

avarar
avarar
avarar
之後要修改結果欄位就直接在transform修改即可,當然還可以額外新增需要的欄位:array_set()
avarar
**個人理解:**這一塊我的理解就是有些客人需要點一些快餐,例如美宜佳里面的車仔麵呀,烤腸呀,在賣出商品的時候需要根據客人的需求對小吃進行篩選再賣出去,不可能客人指點要一個烤腸,你把店裡全部小吃拿給他,讓他自個去篩選,中間賣出去的時候需要Transformer進行篩選再給出商品
avarar

Formatter(包裝):

主要用於保持API返回格式的一致(使用方法和transform類似):

avarar
avarar
avarar
個人理解:Formatter這一塊我的理解就是商品包裝,客人買東西,買小吃,你需要對商品先進行包裝,當然這個包裝肯定需要保持一致
avarar
以上便是我再看完視訊後對其進行總結整理,當然理論的說的容易,實際操作起來還有很多未知的問題,還是需要後面繼續研究學習。