精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

大型項目該如何分層架構,該和MVC說再見了

開發 前端
最近用laravel做自己的個人博客,過程中也思考了一些問題,如何把自己的代碼寫的更優雅呢,為什么laravel沒有models目錄呢,邏輯代碼,數據庫查詢代碼要怎樣放置呢?

 最近用laravel做自己的個人博客,過程中也思考了一些問題,如何把自己的代碼寫的更優雅呢,為什么laravel沒有models目錄呢,邏輯代碼,數據庫查詢代碼要怎樣放置呢?

[[278668]]

我們一直以來都被灌輸的設計思想,即M-V-C,模型(Model)、視圖(view)、控制器(Controller)某種程度上是因為Ruby on Rails的流行。Model在大部分開發者看來就是數據庫操作之類的東西,但是在實際項目開發的過程中,我們會有大量的邏輯代碼,如數據驗證,調用外部服務,發送電子郵件等,所以很多開發者就將業務邏輯封裝到控制器里,當控制器龐大到一定規模,它們將會需要復用其他控制器中的業務邏輯。大部分開發人員并沒有將這些業務邏輯提取到另外的類里面,而是錯誤的以為需要在控制器里面調用其他的控制器方法。這種模式通常被稱為「HMVC」。遺憾的是,這種模式通常也意味著糟糕的程序設計,以及控制器太過復雜。

HMVC 意味著糟糕的設計:你覺得需要在控制器里面調用其他的控制器?這通常意味著糟糕的程序設計,以及你的控制器里面包含了過多的業務邏輯。好的做法是把控制器中的業務邏輯提取出來,放到一個新的第三方類里面,通常,我們將這種第三方類稱之為服務類,這樣你就可以在所有其他控制器里面注入服務類并使用它們了。

有一種更好的方式來構建應用程序結構。但首先我們要忘掉以往我們被灌輸的關于「模型」的一切。干脆點,讓我們直接刪掉模型目錄,重新開始吧!

再見,模型

刪掉你的 models 目錄了嗎?還沒刪就趕緊刪了!我們將要在 app 目錄下創建一個新的目錄,目錄名就以我們這個應用的名字來命名,比如 QuickBill。我們將繼續使用在前面章節中編寫的那些接口和類。

>注意使用場景:記住,如果你在構建一個很小的 Laravel 應用,那在models 目錄下寫幾個 Eloquent 模型其實挺合適的。但在本章節,我們主要關注如何開發適用于分層架構的大型復雜項目。

所以,我們現在有了個 app/QuickBill 目錄,它和應用目錄下的其他目錄如 Http 還有 Console 都是平級的。在 QuickBill 目錄下我們還可以創建幾個其他目錄,例如 Repositories 和 Billing 目錄。目錄都創建好以后,別忘了在 composer.json 文件里通過 PSR-4 自動載入機制將它們注冊到 QuickBill 命名空間下:

  1. "autoload": { 
  2.  "classmap": [ 
  3.  "database/seeds"
  4.  "database/factories" 
  5.  ], 
  6.  "psr-4": { 
  7.  "App\\": "app/", 
  8.  "QuickBill\\": "app/QuickBill" 
  9.  } 
  10. }, 

現在,我們把所有 Eloquent 模型類都放到 QuickBill 目錄下面。這樣我們就能很方便的以 QuickBill\User、QuickBill\Payment 這種方式來使用它們。Repositories 目錄下包含 PaymentRepository 和UserRepository 這種倉庫類,倉庫類里面包含了所有對數據的訪問功能,比如 getRecentPayments 和 getRichestUser。Billing 目錄包含了調用第三方支付服務(如 Stripe 和 Balanced)的類和接口。整個目錄結構現在應該類似這樣:

  1. // app 
  2.  // QuickBill 
  3.  // Repositories 
  4.  -> UserRepository.php 
  5.  -> PaymentRepository.php 
  6.  // Billing 
  7.  -> BillerInterface.php 
  8.  -> StripeBiller.php 
  9.  // Notifications 
  10.  -> BillingNotifierInterface.php 
  11.  -> SmsBillingNotifier.php 
  12.  User.php 
  13.  Payment.php 

數據驗證放在哪?在哪兒進行數據驗證常常困擾著開發人員。可以考慮將數據驗證方法寫進你的「實體」類里面(例如 User.php 和 Payment.php)。方法名可以設置為 validForCreation 或 hasValidDomain。或者你也可以專門創建一個驗證器類 UserValidator,放到 Validation 命名空間下,然后將這個驗證器類注入到你的 Repository 類里面。兩種方式你都可以試試,看哪個你更喜歡!當然在 Laravel 5.* 中,你不需要自己創建驗證器類了,通過 Laravel 自帶的驗證器類就可以滿足你的所有需求。

擺脫了 models 目錄的束縛后,你通常就能克服實現好的架構設計的心理障礙,也就能夠構建一個更合適應用的目錄結構。當然,你構建的每一個應用程序都會有一定的相似之處,因為不管多復雜的應用程序都需要一個數據訪問層(Repository),以及一些外部服務層等等。

別害怕目錄:不要懼怕創建更多目錄來組織管理應用。將整個應用切割成多個細分的功能組件總是必要的,每一個功能組件都專注于某一項職責。跳出「模型」的框框來思考總是有幫助的。例如,我們之前就討論過,你可以創建一個 Repositories 目錄來存放所有的數據訪問類。

核心思想就是分層

你可能已經注意到,優化應用目錄結構的關鍵就是對不同組件的責任進行劃分,或者說為不同的職責創建不同的層。控制器只負責接收和響應 HTTP 請求,然后調用合適的業務邏輯層的類。你的業務邏輯/領域邏輯層才是應用最核心的部分,其中包含了讀取數據,驗證數據,執行支付,發送電子郵件,還有程序里所有其他功能的代碼。事實上,你的領域邏輯層不需要知道任何關于「Web」的事情!Web 層僅僅是一種訪問應用程序的傳輸機制,關于 Web 和 HTTP 請求的一切不應該超出路由和控制器層的范圍。做出好的架構設計的確很有挑戰性,但好的架構設計也會帶來可維護的、更加清晰的代碼。

舉個例子,與其在業務邏輯類里面直接獲取 Web 請求,不如把 Web 請求通過控制器傳遞給業務邏輯類。這個簡單的改動會將你的業務邏輯類和「Web」層解耦,并且不必擔心怎么去模擬 Web 請求,就可以輕松測試業務邏輯類:

  1. class BillingController extends BaseController 
  2.   
  3.  public function __construct(BillerInterface $biller) 
  4.  { 
  5.  $this->biller = $biller; 
  6.  } 
  7.   
  8.  public function postCharge(Request $request) 
  9.  { 
  10.  $this->biller->chargeAccount(Auth::user(), $request->input('amount')); 
  11.  return view('charge.success'); 
  12.  } 
  13.   

現在 chargeAccount 方法更容易測試了,由于我們不再需要在 BillerInterface 實現類中使用 User 和 Request 類,只需將用戶和金額傳遞到該方法即可。

編寫可維護性應用程序的關鍵之一,就是職責分離。要時常檢查一個類是否管得太寬,知道一些它不該知道的。你要常常問自己「這個類是否需要關心X?」如果答案是否定的,那么就要把這塊邏輯提取出來放到另一個類里面,然后用依賴注入的方式將其注入進來。

如何判斷一個類是否管得太寬?一個有用的方法就是檢查你為什么要改這塊代碼。舉個例子,當我們想調整通知邏輯的時候,是否需要修改 Biller 的實現代碼?當然不需要,Biller 實現只關注支付,它與通知邏輯應當僅通過契約來進行交互。在處理代碼時使用這種思路,可以幫助你快速找出應用中需要改進的地方。

東西都放哪兒?

當通過 Laravel 開發應用時,你可能會困惑于應該把各種「東西」放在哪里。例如,輔助函數要放在哪里?事件監聽器要放在哪里?視圖組件要放在哪里?答案可能出乎你的意料 —— 「隨便,放哪兒都行!」Laravel 并沒有很多關于這方面的文件系統上的約定。不過,這個答案的確不能讓人滿意,所以下面我們就這個問題展開討論,一起探討這些「東西」究竟可以放在哪里。

輔助函數

我們可以在 app 目錄下創建一個 helpers.php 文件,然后將自定義的輔助函數都放到這個文件中。當然,由于這個文件里面包含的不是類,不適合通過命名空間引用其中的函數,需要在 composer.json 中全局注冊它:

  1. "autoload": { 
  2.  ... 
  3.  "files": [ 
  4.  "app/helpers.php" 
  5.  ] 
  6. }, 

然后運行 composer dump-auto 重新注冊自動加載映射關系。然后就可以在應用中使用 app/helpers.php 中定義的輔助函數了。

事件監聽器

事件監聽器當然不該放到 routes.php 文件里面,所以我們要找另外的地方來存放。事實上,在 Laravel 5.* 中,當我們通過 php artisan make:listener 命令創建時間監聽器時,系統會自動在 app 目錄下創建 Listeners 子目錄,并將生成的監聽器類放到該目錄下。所以我們對于自定義的事件監聽器類,放到該目錄下即可。

錯誤處理器

在 Laravel 5.* 版本中,默認情況下所有的異常都是通過 App\Exceptions\Handler 來處理的,你也可以通過自定義的異常類來處理,自定義異常類可以放到 app/Exceptions 目錄下。

其他

通常,只要遵循 PSR-4 規范就可以在應用目錄結構中保持類的整齊。結合你目前為止學習到的知識,對于什么代碼要放在什么地方這個問題,應當可以給出一個有理有據的答案了。但永遠不要拒絕試驗。Laravel 的美妙之處就是你可以做出最適合你自己應用的約定。去探索和發現最適合你自己應用的結構吧,別忘了和他人分享你的見解!

例如,你可能受到我們之前例子的啟發,在 QuickBill 中創建一個 Providers 目錄來存放所有你自定義的服務提供者,目錄結構類似這樣:

  1. // app 
  2.  // QuickBill 
  3.  // Billing 
  4.  // Extensions 
  5.  //Pagination 
  6.  -> Environment.php 
  7.  // Providers 
  8.  -> EventPusherServiceProvider.php 
  9.  // Repositories 
  10.  User.php 
  11.  Payment.php 

注意上面的例子,我們有 Providers 和 Extensions 兩個命名空間。所有你自定義的服務提供者都可以放到 Providers 命名空間下,而 Extensions 命名空間可以用來存放你對框架核心進行擴展的類。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2013-12-20 09:59:34

小米閃購模式雷軍

2013-08-13 14:22:33

開發者微軟Windows Pho

2012-10-19 10:32:57

2023-01-05 08:12:11

分層應用代碼

2020-04-06 16:52:01

else關鍵字編程語言

2015-08-26 10:36:32

ios開發漫談

2021-05-12 08:54:56

FastAP web 框架數據庫操作

2015-08-31 10:11:43

iOS大項目開發

2019-04-16 15:26:47

監控系統

2021-07-21 07:11:21

TeamviewerWindowsMac

2023-02-26 00:17:45

2013-03-19 11:28:01

Windows 7 R

2015-06-01 15:47:44

2019-05-09 10:48:46

無人駕駛人工智能配送機器人

2024-01-22 09:17:35

2022-03-14 10:24:31

編程語言開發

2015-07-09 10:22:27

CloudStackOpenStack云計算

2011-08-17 09:18:11

項目管理

2009-08-01 08:46:47

2015-10-10 11:08:36

控制面板Windows 10微軟
點贊
收藏

51CTO技術棧公眾號

国产成人一二三区| 欧美精品第一页在线播放| 激情五月婷婷久久| 日本视频不卡| 91成人短视频在线观看| 国产精品久久久久久久蜜臀| 69堂成人精品视频免费| 99精品在线播放| 国产精品麻豆久久| 亚洲高清在线观看| 中文字幕久久一区| 网站黄在线观看| 蜜桃视频在线一区| 久久免费观看视频| 少妇视频一区二区| 欧美挤奶吃奶水xxxxx| 欧美日本乱大交xxxxx| 3d动漫一区二区三区| 日本激情在线观看| 91色porny在线视频| 国产日韩欧美在线视频观看| 亚洲第一精品在线观看| 日韩精品久久久久久久软件91| 婷婷夜色潮精品综合在线| 午夜精品一区二区三区在线观看 | 91久久精品国产91久久性色| 99视频在线看| 欧美精品综合| 少妇精69xxtheporn| 色呦呦一区二区| 亚洲亚洲一区二区三区| 亚洲欧洲日韩女同| 日本不卡二区高清三区| 黄色美女一级片| 国产一区免费电影| 久久久精品网站| a天堂中文字幕| 久久久伦理片| 精品欧美一区二区三区精品久久| 欧美午夜aaaaaa免费视频| 日韩理论视频| 亚洲成a人片综合在线| 国产日韩中文字幕在线| 秋霞av一区二区三区| 亚洲激情av| 欧美xxxx做受欧美.88| 欧美高清精品一区二区| 成人在线观看免费视频| 色先锋资源久久综合| 草草久久久无码国产专区| 日本h片在线观看| 亚洲精品自拍动漫在线| 在线视频一区观看| 求av网址在线观看| 国产精品久久777777| 亚洲乱码国产乱码精品天美传媒| 九一国产在线| 久久99精品久久久| 国产狼人综合免费视频| 最新黄色网址在线观看| 日本网站在线观看一区二区三区| 日韩69视频在线观看| 精品一区二区6| 欧美一区二区麻豆红桃视频| 亚洲深夜福利在线| 成人黄色免费网址| 精品亚洲成人| 日韩在线观看高清| www.xxxx日本| 欧美人成在线| 91av在线看| 天干夜夜爽爽日日日日| 日韩av不卡在线观看| 国产精品视频男人的天堂| 亚洲色婷婷一区二区三区| 欧美+亚洲+精品+三区| 欧美成人精品一区二区三区| 麻豆疯狂做受xxxx高潮视频| 在线观看视频免费一区二区三区| 亚洲精品456在线播放狼人| 国产 中文 字幕 日韩 在线| 免费成人结看片| 日韩三级中文字幕| 国产黑丝在线观看| 精品在线播放| 中文字幕在线成人| 欧美黑人一级片| 亚洲久久视频| 国产狼人综合免费视频| 亚洲免费成人网| 久久久天堂av| 最新av网址在线观看| 成人高潮aa毛片免费| 色婷婷综合久久久中文字幕| 在线看免费毛片| 久久99国产精品久久99大师| 国产午夜精品全部视频播放 | 亚洲欧美乱综合| 国产av天堂无码一区二区三区| 日韩美女在线看免费观看| 91精品福利在线一区二区三区| 手机免费看av片| 日本不卡二三区| 久久免费国产精品1| 自拍偷拍色综合| 成人免费黄色在线| 国产精品自拍偷拍视频| 亚洲经典一区二区三区| 精品一区二区三区视频| 黄色91av| aa在线视频| 欧洲视频一区二区| 中国黄色片视频| 四虎国产精品免费观看| 91精品国产乱码久久久久久蜜臀| 亚洲专区在线播放| 久久综合久久综合久久| 国产精品二区三区| 最新真实国产在线视频| 五月婷婷激情综合| 手机av在线免费| 久久av超碰| 国内精品400部情侣激情| 中文字幕在线观看1| 久久久久国产精品麻豆ai换脸| 国产亚洲精品久久久久久久| 久久久成人av毛片免费观看| 亚洲国产精品一区二区久| 国产喷水在线观看| 日韩一区精品字幕| 狠狠色综合网站久久久久久久| 国产美女福利在线| 欧美三级在线播放| 男女做爰猛烈刺激| 夜久久久久久| 7777精品久久久久久| 国产aⅴ爽av久久久久成人| 国产精品人妖ts系列视频| www.99热这里只有精品| 在线精品国产亚洲| 久久综合亚洲社区| 激情小说中文字幕| 精品一区二区免费看| 国产欧美一区二区三区久久| 九色在线视频蝌蚪| 一本色道综合亚洲| 久久丫精品国产亚洲av不卡| 国产99亚洲| 2021久久精品国产99国产精品| 黄色福利在线观看| 亚洲国产一区二区三区青草影视| 国产精品自拍片| 国产丝袜一区| 91精品91久久久久久| 欧美 日韩 国产 在线| 夜夜嗨av一区二区三区中文字幕| koreanbj精品视频一区| 国产一区二区三区亚洲| 韩剧1988在线观看免费完整版| 少妇人妻一区二区| 精品日本美女福利在线观看| 爱爱的免费视频| 久久青草久久| 午夜精品亚洲一区二区三区嫩草 | 2024最新电影在线免费观看| 91精品国产色综合久久不卡电影 | 欧美在线|欧美| 永久免费av无码网站性色av| 美女在线视频一区| 性欧美18一19内谢| 日本一区二区三区播放| 欧美日韩国产91| 刘亦菲毛片一区二区三区| 五月天欧美精品| 老熟妇一区二区| 韩国欧美国产一区| 亚洲一区二区三区av无码| 啪啪国产精品| 国产精品91久久久| 国产写真视频在线观看| 精品裸体舞一区二区三区| 久草手机在线观看| 国产欧美日韩在线观看| 激情久久综合网| 国产欧美短视频| 亚洲成人第一| 亚洲精品一二三**| 欧美中文字幕视频| 国产理论在线观看| 精品亚洲一区二区三区在线播放| 中文永久免费观看| 亚洲一区欧美一区| 久久久久久国产免费a片| 国产盗摄精品一区二区三区在线| 五十路熟女丰满大屁股 | wwwwww欧美| 日本h片久久| 欧美猛男性生活免费| 丝袜+亚洲+另类+欧美+变态| 一区二区欧美视频| 新91视频在线观看| 国产精品女主播一区二区三区| 日韩电影在线播放| 国偷自产一区二区免费视频| 久久精品亚洲精品| 天天综合网天天综合| 欧美男男青年gay1069videost | 亚洲激情社区| 一区二区三区av在线| 秋霞综合在线视频| 亚洲伊人久久大香线蕉av| 欧美香蕉视频| 韩国19禁主播vip福利视频| 日本精品在线| 亚洲天堂av在线播放| 黄色福利在线观看| 欧美一区二区三区爱爱| 久久久国产免费| 精品美女国产在线| 精品深夜av无码一区二区老年| 亚洲国产精品成人综合| 日本黄色片在线播放| 国产福利视频一区二区三区| 日本三级黄色网址| 视频一区二区国产| 日韩av片在线看| 激情综合亚洲| 中国黄色录像片| 日韩情爱电影在线观看| 欧美一区二区三区在线播放| 欧美午夜寂寞| 国产午夜精品在线| 亚洲视频一起| 91嫩草国产在线观看| 粉嫩一区二区三区在线观看| 国产精品免费视频久久久| 成人午夜视屏| 欧美一区第一页| 手机av在线| 欧美一级淫片aaaaaaa视频| 色是在线视频| 91精品国产乱码久久久久久蜜臀| 国产探花在线观看| 欧美劲爆第一页| 人妖欧美1区| 欧美二区乱c黑人| 九色91在线| 久久免费视频网站| www.综合| 7m精品福利视频导航| av有码在线观看| 97久久超碰福利国产精品…| 老色鬼在线视频| 欧美在线观看一区二区三区| 亚洲国产欧美日本视频| 日本一区二区在线免费播放| 你懂得影院夜精品a| 国产精品免费视频久久久| 色8久久久久| 久久久久久69| av毛片午夜不卡高**水| 2019av中文字幕| 午夜影院在线播放| 国产精品电影一区| 天堂久久一区| 岛国一区二区三区高清视频| 精品国产午夜肉伦伦影院| 久久久久久久久久码影片| 只有精品亚洲| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 精品久久久久中文字幕小说 | 亚洲综合成人婷婷小说| 一区二区三区视频免费视频观看网站 | 欧美成人精品网站| 9191久久久久久久久久久| а√中文在线资源库| 亚洲国产高清福利视频| 九九在线视频| 久久天天躁狠狠躁夜夜躁| 日本大片在线播放| 国产91热爆ts人妖在线| 宅男噜噜噜66国产精品免费| 国产手机精品在线| 色综合狠狠操| 成人黄色大片网站| 人妖欧美一区二区| 最新国产精品自拍| 国产性天天综合网| 欧美成人手机视频| 色综合天天综合色综合av| 国产精品无码AV| 亚洲精品久久久久中文字幕欢迎你| 九色视频成人自拍| 欧美乱妇高清无乱码| 国产精品扒开腿做爽爽爽视频软件| 91探花福利精品国产自产在线| 欧美亚洲大陆| 天天干天天色天天爽| 久久婷婷久久| 久久久久国产免费| 国产精品欧美久久久久无广告| 国产性70yerg老太| 欧美三级一区二区| 色就是色亚洲色图| 欧美黄色性视频| 日韩久久一区| 日本欧洲国产一区二区| 欧美午夜不卡| 日本77777| 国产欧美一区二区精品忘忧草| 久久精品美女视频| 欧美喷水一区二区| 国产一二三区在线视频| 国内精品视频一区| 亚洲欧美专区| 性欧美.com| 美女91精品| 激情综合丁香五月| 亚洲综合丝袜美腿| 国产免费无遮挡| 日韩一区二区福利| 成人直播视频| 久久国产精品 国产精品| 国产精品chinese| 成年人网站av| 1000部国产精品成人观看| 亚洲欧美日韩一区二区三区四区| 日韩高清免费在线| 9765激情中文在线| 豆国产97在线| 国内精品亚洲| 永久免费看片在线观看| 国产原创一区二区三区| 午夜时刻免费入口| 色婷婷av一区二区三区软件| 先锋av资源站| 欧美在线影院在线视频| 清纯唯美亚洲经典中文字幕| 鲁一鲁一鲁一鲁一澡| www.亚洲色图.com| 久久精品无码人妻| 欧美精品一区二区久久久| 欧美v亚洲v| 成人激情直播| 亚洲毛片在线| 中文字幕5566| 91国产成人在线| 成年人在线观看| 国产精品亚洲激情| 国产精品久久久久9999赢消| 思思久久精品视频| 亚洲丝袜另类动漫二区| 国产三级视频在线播放| 欧美美最猛性xxxxxx| 国产无遮挡裸体免费久久| 可以在线看的av网站| 久久夜色精品国产欧美乱极品| 日韩久久中文字幕| 伊人久久精品视频| 日韩一区二区三区四区五区| 日本久久高清视频| 不卡高清视频专区| 中文字幕黄色片| 中文字幕日韩欧美在线| 国产一区 二区| 秋霞无码一区二区| 欧美国产成人精品| 国产精品爽爽久久| 97在线免费观看| 国产亚洲欧美日韩在线观看一区二区 | 亚洲精品中字| 国产成人在线网站| 一区二区三区福利视频| 神马久久久久久| 视频一区在线| 欧美成人精品欧美一级乱| 中文字幕一区在线| 风流少妇一区二区三区91| 欧美中文在线观看国产| 久久久久久久久久久妇女| 一级黄色电影片| 欧美性感一区二区三区| 亚洲男同gay网站| 欧美大陆一区二区| 精品一区二区三区香蕉蜜桃| 日韩视频免费观看高清| 中文字幕日韩免费视频| 大桥未久女教师av一区二区| 国产免费人做人爱午夜视频| 亚洲免费资源在线播放| 亚洲av成人无码久久精品老人 | 欧美一性一交| 在线观看国产一级片| 午夜天堂影视香蕉久久| aⅴ在线视频男人的天堂| 国产精品美女诱惑| 免费成人在线影院| 日韩av免费网址| 欧美成人精品三级在线观看| 国产一区二区三区91|