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一区二区
波多野结衣之无限发射| caoporn超碰97| 天天干天天爽天天射| 日韩精品福利片午夜免费观看| 国产91在线视频观看| 亚洲色图欧美自拍| 国产xxxxx视频| 日韩在线综合网| 免费日韩在线观看| 在线播放免费视频| 簧片在线免费看| 亚洲国产精品久久久久婷蜜芽| 国产在线观看欧美| 国产日产欧美一区二区| 国产三级精品三级在线| 三级a三级三级三级a十八发禁止| 国产资源在线视频| 男人日女人下面视频| 久久99久久99精品| 欧洲精品在线播放| 国产成人一区二区三区别| 久久人人爽人人片| 天天干天天曰天天操| 福利片一区二区三区| 日本中文字幕观看| 色网站在线视频| 奇米777在线| 国产女主播av| 欧美国产视频一区| 天堂…中文在线最新版在线| 少妇高潮毛片色欲ava片| 奇米影视亚洲色图| 国产午夜福利视频在线观看| 激情六月丁香婷婷| 嫩草影院国产精品| 三级黄色片播放| 50度灰在线观看| www.日本在线播放| 成人小视频在线看| 91香蕉视频导航| 亚洲精品在线视频播放| 奇米777四色影视在线看| 国产爆乳无码一区二区麻豆| 欧美精品99久久| 91视频免费版污| 26uuu成人| 久色视频在线播放| 欧美三级理论片| 日本丰满少妇黄大片在线观看| 免费视频爱爱太爽了| 欧美 日韩精品| 亚洲三级在线观看视频| 久久国产精品网| 久久这里只精品| 国产日韩亚洲欧美在线| 免费大片在线观看| 日本精品免费视频| 116极品美女午夜一级| 1314成人网| 超碰97人人射妻| 热这里只有精品| 六月丁香婷婷在线| 国产精品国三级国产av| 精品亚洲一区二区三区四区| 中国丰满熟妇xxxx性| 911av视频| 99草草国产熟女视频在线| 轻点好疼好大好爽视频| 欧美男女交配视频| 亚洲人成无码www久久久| 国产一二三四区在线观看| 亚洲精品怡红院| 欧美丰满熟妇bbbbbb百度| 日本中文字幕在线不卡| 婷婷激情四射五月天| 国产69精品久久久久久久| 少妇高潮流白浆| 日本中文字幕精品—区二区| 国产一区二区在线视频播放| 51xx午夜影福利| 午夜在线视频免费观看| 午夜大片在线观看| 亚洲天堂网一区| 国产精品涩涩涩视频网站| 成人午夜精品久久久久久久蜜臀| 成人性生交视频免费观看| 又色又爽又高潮免费视频国产| 国产欧美日韩网站| 亚洲美免无码中文字幕在线| 欧美午夜性视频| 国产精品igao激情视频| 日本一级黄视频| 中文字幕精品在线播放| 欧美 日韩 国产精品| 最新黄色av网站| 成人在线免费观看视频网站| 色哺乳xxxxhd奶水米仓惠香| 一级全黄肉体裸体全过程| 强伦女教师2:伦理在线观看| 午夜啪啪福利视频| 日韩成人手机在线| 免费看国产一级片| 乱子伦视频在线看| 国产九九在线视频| 午夜影院免费观看视频| 日韩不卡一二区| 国产黄色片免费在线观看| 男女超爽视频免费播放| 久久久亚洲精品无码| 久久久久久久激情| 中文字幕视频三区| 成人在线观看毛片| 夫妻免费无码v看片| 超碰在线公开97| 99热都是精品| 国产毛片视频网站| jizz18女人| 8x8x华人在线| 蜜臀av午夜一区二区三区| 欧美一级裸体视频| 日韩精品一区二区三区电影| 久久精品国产精品亚洲色婷婷| 可以免费在线看黄的网站| 亚洲欧美日韩一二三区| 黄色一级在线视频| 91aaa精品| 日韩网址在线观看| 日韩最新中文字幕| 欧美成人黑人猛交| 日韩精品久久一区二区| 北条麻妃在线一区| 欧洲精品视频在线| 中文字幕天天干| 中文精品无码中文字幕无码专区 | 爱豆国产剧免费观看大全剧苏畅| 久久久99精品视频| 成人3d动漫一区二区三区| 久久精品在线免费视频| 北条麻妃av高潮尖叫在线观看| 日本精品免费视频| 手机看片福利日韩| 成人在线观看你懂的| 日韩在线不卡一区| 国产精品视频一区二区三区四区五区| 亚洲黄色片免费看| 欧美日韩大尺度| 日日摸日日碰夜夜爽无码| 国产高清免费在线| 一本色道久久亚洲综合精品蜜桃| 久久99中文字幕| www婷婷av久久久影片| 国产精欧美一区二区三区白种人| 波多野结衣家庭教师视频| 在线观看av的网址| av动漫免费观看| 中文字幕一区二区在线观看视频| av无码精品一区二区三区| 男人靠女人免费视频网站| 阿v天堂2018| 国产视频在线观看网站| 50度灰在线观看| 日韩欧美视频免费在线观看| 在线视频一二三区| 强伦女教师2:伦理在线观看| 一本二本三本亚洲码| 婷婷视频在线播放| 伊人精品视频在线观看| 成人高清在线观看视频| 国产精品无码乱伦| 国产女人18毛片| 国产美女永久无遮挡| 免费一级特黄毛片| 欧美牲交a欧美牲交| 男人透女人免费视频| 少妇性l交大片| 性生活免费在线观看| 99九九99九九九99九他书对| 中文字幕第66页| 久久成人福利视频| 欧美牲交a欧美牲交aⅴ免费真| 日韩在线综合网| 久久婷五月综合| 丰满女人性猛交| 欧美精品久久久久久久久久久| a在线视频观看| 福利在线一区二区三区| 99视频在线观看视频| 免费不卡av在线| 国产一二三区av| 天天做天天爱天天高潮| 蜜臀av无码一区二区三区| 欧美日韩激情视频在线观看| 国产精品久久a| 一级性生活视频| 日韩中文字幕二区| 天天操狠狠操夜夜操| 老司机激情视频| 狠狠躁狠狠躁视频专区| 精品无码av无码免费专区| 国产1区2区在线|