gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

聊聊Laravel中怎么使用 PHP 的裝飾器模式

如何在 Laravel 中使用 PHP 的裝飾器模式?下面本篇文章就來給大家介紹一下Laravel中使用PHP裝飾器模式的方法,希望對大家有所幫助!

聊聊Laravel中怎么使用 PHP 的裝飾器模式

Laravel 9 保姆級視頻教程,想學不會都難!進入學習

設計模式對每個開發人員都很重要。它解決了您構建的每個項目中非常常見的問題。

裝飾器模式定義:

它可以幫助您在一個對象上添加額外的行為,而又不影響同一類中的其他對象。

維基百科:

裝飾器模式是一種設計模式,它允許動態地將行為添加到單個對象,而不會影響同一類中其他對象的行為

問題

假設我們有一個Post模型

class Post extends Model {     public function scopePublished($query) {         return $query->where('published_at', '<=', 'NOW()');     } }

在我們的PostsController中,我們有如下的index方法

class PostsController extends Controller {     public function index() {         $posts = Post::published()->get();         return $posts;     } }

為了緩存帖子并避免每次我們需要列出帖子時都查詢數據庫,我們可以執行以下操作

class PostsController extends Controller {     public function index() {         $minutes = 1440; # 1 day         $posts = Cache::remember('posts', $minutes, function () {             return Post::published()->get();         });         return $posts;     } }

現在,我們將帖子緩存1天。但看看代碼,控制器了解了太多。它知道我們緩存了多少天,它自己緩存了對象。

同樣,假設您正在為HomePageController的Tag,Category,Archives實現相同的功能。閱讀和維護的代碼太多了。

倉庫模式

在大多數情況下,倉庫模式是連接到裝飾器模式。

首先,讓我們使用倉庫模式分離獲取帖子的方式,創建具有以下內容的app/Repositories/Posts/PostsRepositoryInterface.php

namespace AppRepositoriesPosts;  interface PostsRepositoryInterface  {      public function get();      public function find(int $id);  }

在同個目錄下創建具有下面內容的 PostsRepository

namespace AppRepositoriesPosts;  use AppPost;  class PostsRepository implements PostsRepositoryInterface {     protected $model;      public function __construct(Post $model) {         $this->model = $model;     }      public function get() {         return $this->model->published()->get();     }      public function find(int $id) {         return $this->model->published()->find($id);     }  }

回到PostsController并將更改應用為

namespace AppHttpControllers;  use AppRepositoriesPostsPostsRepositoryInterface; use IlluminateHttpRequest;  class PostsController extends Controller {     public function index(PostsRepositoryInterface $postsRepo) {         return $postsRepo->get();     } }

控制器變得健康,知道足夠的細節來完成工作。

在這里,我們依靠 Laravel 的 IOC 注入 Posts 接口的具體對象來獲取我們的帖子

我們需要做的就是告訴Laravel的IOC使用接口時要創建哪個類。

在你的 app/Providers/AppServiceProvider.php 添加綁定方法

namespace AppProviders;  use AppRepositoriesPostsPostsRepositoryInterface; use AppRepositoriesPostsPostsRepository;  use IlluminateSupportServiceProvider;  class AppServiceProvider extends ServiceProvider {     public function register()     {         $this->app->bind(PostsRepositoryInterface::class,PostsRepository::class);     } }

現在無論何時我們注入PostsRepositoryInterface Laravel 都會創建 PostsRepository 的實例并將其返回。

通過裝飾器實現緩存

我們在一開始就說過,裝飾器模式允許將行為添加到單個對象,而不會影響同一類中的其他對象。

在這里緩存是行為,對象/類是 PostsRepository

讓我們在 app/Repositories/Posts/PostsCacheRepository.php 中創建具有以下內容的PostsCacheRepository

namespace AppRepositoriesPosts;  use AppPost; use IlluminateCacheCacheManager;  class PostsCacheRepository implements PostsRepositoryInterface {     protected $repo;      protected $cache;      const TTL = 1440; # 1 day      public function __construct(CacheManager $cache, PostsRepository $repo) {         $this->repo = $repo;         $this->cache = $cache;     }      public function get() {         return $this->cache->remember('posts', self::TTL, function () {             return $this->repo->get();         });     }      public function find(int $id) {         return $this->cache->remember('posts.'.$id, self::TTL, function () {             return $this->repo->find($id);         });     } }

在這個類中,我們接受 Caching 對象和 PostsRepository 對象,然后使用類(裝飾器)將緩存行為添加到 PostsReposiory 實例。

我們可以使用相同的示例將HTTP請求發送到某些服務,然后在失敗的情況下返回模型。我相信您會從該模式以及它是如何輕松添加行為中受益。

最后一件事是修改 AppServiceProvider 接口綁定以創建 PostsCacheRepository 實例而不是PostsRepository

namespace AppProviders;  use AppRepositoriesPostsPostsRepositoryInterface; use AppRepositoriesPostsPostsCacheRepository;  use IlluminateSupportServiceProvider;  class AppServiceProvider extends ServiceProvider {     public function register()     {         $this->app->bind(PostsRepositoryInterface::class,PostsCacheRepository::class);     } }

現在再次檢查文件,您會發現它非常易于閱讀和維護。同樣,它也是可測試的,如果您決定在某個時候刪除緩存層。您只需在AppServiceProvider中更改綁定即可。無需額外更改。

結論

  • 我們學習了如何使用修飾器模式緩存模型
  • 我們展示了倉庫模式如何連接到修飾器模式
  • 依附注入和Laravel IOC如何使我們的生活變得輕松
  • laravel組件功能強大

希望您喜歡閱讀本文。它向您展示了強大的設計模式,以及如何使您的項目易于維護和管理

原文地址:https://dev.to/ahmedash95/design-patterns-in-php-decorator-with-laravel-5hk6

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
少妇高潮大叫好爽喷水| 毛片在线视频观看| 国产xxxx振车| 婷婷视频在线播放| 日韩av在线综合| 丰满少妇久久久| 午夜在线视频免费观看| 亚洲最大综合网| 精品99在线视频| 爱豆国产剧免费观看大全剧苏畅| 国产二区视频在线| 国产视频在线观看网站| 精品久久免费观看| 九九热精品国产| 男人添女人下面免费视频| 日韩精品一区二区三区不卡| 99久久国产综合精品五月天喷水| www.69av| 可以看毛片的网址| 欧美图片激情小说| 精品无码国产一区二区三区av| 日本福利视频在线观看| 久久精品在线免费视频| av一区二区三区免费观看| xxxxxx在线观看| 特级西西444| av女优在线播放| 成人黄色av片| 久久国产色av免费观看| 精品视频无码一区二区三区| 欧美日韩亚洲自拍| 亚洲欧美视频二区| 男人的天堂成人| cao在线观看| 国产美女三级视频| 视色视频在线观看| 丰满女人性猛交| 国产日本在线播放| 少妇人妻互换不带套| 国产精品视频分类| 色婷婷一区二区三区在线观看| 国产精品无码乱伦| 亚洲一区二区三区av无码| 一女被多男玩喷潮视频| 青青在线免费观看视频| 免费成人黄色大片| 可以在线看黄的网站| 国产原创popny丨九色| 久久网站免费视频| 成人亚洲免费视频| 国产肉体ⅹxxx137大胆| 99999精品视频| 五月天激情播播| 大陆av在线播放| 免费看黄色一级大片| 久久久国产精华液999999 | 日韩精品一区二区三区色欲av| 好男人www社区| 人妻av中文系列| 三级a三级三级三级a十八发禁止| 999久久久精品视频| 精品99在线视频| www激情五月| 国产毛片视频网站| 天天色综合社区| 精品无码国产一区二区三区av| www.国产区| 日本天堂免费a| 中文字幕第17页| 日韩av高清在线看片| 97人人爽人人| 无码人妻丰满熟妇区96| 日本久久高清视频| 色中文字幕在线观看| 国产精品网站免费| 日本网站在线看| 欧美亚洲另类色图| 青青草视频在线视频| 日本人69视频| 三上悠亚在线一区二区| 日本免费a视频| 一道本视频在线观看| 国产高清av在线播放| 国产 欧美 日本| 色呦呦网站入口| 播放灌醉水嫩大学生国内精品| 精品国产三级a∨在线| 国产无限制自拍| 日本一道在线观看| 高清在线观看免费| 亚洲黄色片免费看| www.av91| 人妻互换免费中文字幕| 每日在线观看av| 欧美,日韩,国产在线| 国内外免费激情视频| 亚洲av无日韩毛片久久| 欧美乱大交xxxxx潮喷l头像| 国产白丝袜美女久久久久| 在线观看日本www| 在线观看免费的av| 99视频在线免费播放| 中文字幕制服丝袜在线| 国产精品无码专区av在线播放 | 嫩草视频免费在线观看| 黄色av免费在线播放| 欧美婷婷精品激情| 亚洲高清在线免费观看| jizzjizzxxxx| 日本在线视频www| 欧美一级黄色影院| 亚洲狼人综合干| 日本在线视频www| 黄色一级二级三级| 色免费在线视频| 青青视频免费在线观看| 国产91xxx| 在线免费看v片| 日本熟妇人妻xxxx| 欧美乱做爰xxxⅹ久久久| 色哟哟免费网站| 鲁一鲁一鲁一鲁一澡| 肉大捧一出免费观看网站在线播放| 午夜精品免费看| 男人天堂新网址| 无码 制服 丝袜 国产 另类| 丰满人妻中伦妇伦精品app | av在线免费观看国产| 国产a级片免费看| 国产91色在线观看| 欧美精品一区二区三区免费播放| 日韩一二区视频| 日本人妻伦在线中文字幕| 国产乱码一区二区三区四区| 国产又粗又长又大的视频| 噜噜噜久久亚洲精品国产品麻豆 | 污视频网站观看| 精品一区二区成人免费视频| 情侣黄网站免费看| 久草资源站在线观看| 春日野结衣av| 肉大捧一出免费观看网站在线播放| 成年人视频网站免费观看| 福利视频一二区| 欧美成人高潮一二区在线看| 国产av人人夜夜澡人人爽麻豆| 成人性做爰片免费视频| 亚洲色图偷拍视频| 亚洲精品久久久中文字幕| 国产淫片免费看| 日韩中文字幕组| 天天干天天草天天| 婷婷激情小说网| 三级黄色片播放| 337p粉嫩大胆噜噜噜鲁| 各处沟厕大尺度偷拍女厕嘘嘘| 一区二区成人网| www.色就是色| 免费一级特黄特色毛片久久看| 污视频网址在线观看| 欧美一二三不卡| a在线视频观看| 色一情一区二区| 996这里只有精品| 黄色国产小视频| 成人黄色片免费| 精品999在线| 欧美激情国产精品日韩| 青青青国产在线视频| 香港三级韩国三级日本三级| 91九色在线观看视频| 久久这里只有精品18| 国产中文字幕乱人伦在线观看| av不卡在线免费观看| 图片区乱熟图片区亚洲| 做a视频在线观看| 男女私大尺度视频| 97久久国产亚洲精品超碰热| 亚洲激情在线观看视频| 凹凸国产熟女精品视频| av高清在线免费观看| 国产片侵犯亲女视频播放| 日日干日日操日日射| 久久国产亚洲精品无码| 日韩精品在线观看av| 黄色免费视频大全| av动漫在线免费观看| 欧美三级一级片| 欧美久久在线观看| 不卡影院一区二区| 污视频在线观看免费网站| 182午夜在线观看| 九色91popny| 五月天丁香花婷婷| 超碰人人草人人| 天堂在线中文在线| 善良的小姨在线| 国产一区二区在线观看免费视频| 成人免费在线观看视频网站| 国产精品第12页|