視頻:https://www.youtube.com/watch... (有墻各位懂的)
Laravel簡單架構(gòu):
簡單的小項目可能會把數(shù)據(jù)庫查詢玻褪,業(yè)務(wù)邏輯阅懦,數(shù)據(jù)傳給View幾乎所有操作都放在Controller,如何項目后期需求變大眶诈,最后Controller會變得很臃腫褂微,難懂,不易維護(同樣嗤堰,有些會把所有增刪改查戴质,功能類寫在Model,Controller再從Model一個個的拿踢匣,導(dǎo)致Model很亂告匠,Model有關(guān)聯(lián)表的時候可能會引起一些不必要的數(shù)據(jù)庫查詢)
我自己的理解:用美宜佳賣商品給客人來理解,主要Controller是某個加盟商美宜佳門店离唬,View是客人后专,Model是商品制造工廠(理解有些粗糙)
Repository(商品倉庫):
跟Eloquent/DB操作相關(guān)的,例如增刪改查输莺,直接和數(shù)據(jù)庫打交道的基礎(chǔ)操作抽出來放在Repository中戚哎,repository中文是倉庫,我的理解就是我們要從Model拿數(shù)據(jù)嫂用,先放在倉庫repository中型凳,統(tǒng)一由倉庫管理分配,發(fā)揮倉庫的職責(zé)
Service(總部服務(wù)平臺):
商業(yè)邏輯嘱函,不是簡單的查詢數(shù)據(jù)甘畅,而是特定的任務(wù),例如判斷用戶是否是會員,設(shè)置用戶權(quán)限等等疏唾,這些操作建議放在Service蓄氧,之后Controller再調(diào)用它
個人理解:所以在Controller和Model/Eloquent中間墊兩層,如果Repository理解為商品倉庫的話槐脏,我的理解Service是類似總部內(nèi)部的服務(wù)平臺喉童,加盟商Controller需要拿商品給客人View,不能直接去食品工廠Model拿顿天,先通過倉庫repository泄朴,然后總部服務(wù)平臺Service進行打包啊,整理啊露氮,發(fā)車白婊摇(各種任務(wù)),最后再給到加盟商Controller手里
Presenter(充值業(yè)務(wù)):
一些比較固定畔规,可以單獨調(diào)用的局扶,可以用Presenter抽出來,不需要讓Model去做叁扫,下次修改也單獨修改Presenter就行了三妈,
例如時間戳轉(zhuǎn)成Y-m-d H:i:s格式,可以單獨用Presenter處理后用@inject插入到前端模板莫绣,而不是把轉(zhuǎn)化過程寫在模板上面
個人理解:所以在Controller和View中間可以加一層Presenter畴蒲,我的理解有點類似:美宜佳商戶(Controller)可以給客人(View)充公交卡,這種小事不需要勞費工廠(Model)
Transformer(快餐小吃人工篩選):
轉(zhuǎn)換器对室,例如在倉庫repository中有一個獲取所有用戶信息的查詢操作:
this->user->all(['name','email'])?這樣另外的地方又要全部字段蔫骂,這不就沖突了?這時候Transformer就有用了牺汤,其實原理是對$this->user->all()獲得的數(shù)據(jù)進行篩選后再輸出辽旋,加了個篩選器。
之后要修改結(jié)果字段就直接在transform修改即可檐迟,當(dāng)然還可以額外添加需要的字段:array_set()
個人理解:這一塊我的理解就是有些客人需要點一些快餐补胚,例如美宜佳里面的車仔面呀,烤腸呀追迟,在賣出商品的時候需要根據(jù)客人的需求對小吃進行篩選再賣出去溶其,不可能客人指點要一個烤腸,你把店里全部小吃拿給他怔匣,讓他自個去篩選握联,中間賣出去的時候需要Transformer進行篩選再給出商品
Formatter(包裝):
主要用于保持API返回格式的一致(使用方法和transform類似):
個人理解:Formatter這一塊我的理解就是商品包裝,客人買東西每瞒,買小吃金闽,你需要對商品先進行包裝,當(dāng)然這個包裝肯定需要保持一致
以上便是我再看完視頻后對其進行總結(jié)整理剿骨,當(dāng)然理論的說的容易代芜,實際操作起來還有很多未知的問題,還是需要后面繼續(xù)研究學(xué)習(xí)浓利。