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一区二区
能看的毛片网站| 福利视频免费在线观看| 久久久一本二本三本| 精品日韩在线播放| 日本在线播放一区二区| 四虎成人在线播放| 污色网站在线观看| 久久福利一区二区| 中文字幕亚洲影院| 亚洲熟女乱色一区二区三区| 97碰在线视频| 国产成人永久免费视频| 无码人妻aⅴ一区二区三区日本| 亚洲天堂伊人网| 国产永久免费网站| 中文字幕1234区| 国产精品一二三在线观看| www.污网站| 精品视频在线观看一区二区| 国产www免费| 日本黄网站免费| 网站一区二区三区| 午夜免费福利网站| 精品人妻少妇一区二区| 日韩欧美视频网站| 欧美性猛交久久久乱大交小说| 成人黄色一区二区| 亚洲av毛片在线观看| 男人天堂手机在线视频| 中文字幕乱码人妻综合二区三区| 亚洲成人福利在线观看| 亚洲在线观看网站| 中文字幕无码精品亚洲35| 亚洲色图久久久| 国产美女作爱全过程免费视频| 尤物av无码色av无码| 午夜免费福利在线| 亚洲精品蜜桃久久久久久| 日本男人操女人| 久久久久久久香蕉| 国内外免费激情视频| 国产又粗又硬又长| 欧美性猛交xxx乱久交| 国产日韩第一页| 午夜欧美福利视频| 97视频在线免费| 最新免费av网址| 国产高清精品在线观看| 亚洲黄色网址在线观看| 一道本视频在线观看| 六月丁香激情网| h无码动漫在线观看| 午夜xxxxx| 玖玖爱视频在线| 成人性生生活性生交12| 国产超级av在线| 国产成人在线小视频| 公共露出暴露狂另类av| 日本中文字幕精品—区二区| 免费无码国产v片在线观看| 国产一区 在线播放| 看一级黄色录像| 免费在线观看污污视频| 特黄视频免费观看| 在线看的黄色网址| 亚洲欧美视频二区| 黄色一级二级三级| 9l视频白拍9色9l视频| 日韩精品一区二区三区色欲av| av在线免费观看国产| 中文字幕精品在线播放| www国产无套内射com| 久久久天堂国产精品| 69精品丰满人妻无码视频a片| 艳母动漫在线观看| 日本高清视频免费在线观看| 91麻豆天美传媒在线| 日本黄大片在线观看| 欧美一级免费播放| 国产91对白刺激露脸在线观看| 久在线观看视频| 国产xxxxx视频| 欧美成人三级在线播放| 亚洲最新免费视频| 18黄暴禁片在线观看| 欧美一区二区三区爽大粗免费| 18禁男女爽爽爽午夜网站免费 | 日本新janpanese乱熟| 日本精品久久久久中文字幕| 人人干人人干人人| 中文字幕精品在线播放| 男人日女人逼逼| 伊人色在线观看| 男人草女人视频| 人妻有码中文字幕| 超碰在线人人爱| xxxxxx在线观看| 国产在线观看福利| 成年人黄色在线观看| 黄色一级片在线看| 亚洲天堂2018av| 国产美女主播在线播放| 国产一伦一伦一伦| 日日摸日日碰夜夜爽无码| 国产又大又黄又猛| 日本中文字幕亚洲| www.超碰97.com| 日韩av综合在线观看| 欧美一级小视频| 国产97色在线 | 日韩| 无码人妻aⅴ一区二区三区日本| 欧美在线观看成人| 久久香蕉视频网站| 亚洲18在线看污www麻豆 | 欧美高清中文字幕| 日本高清久久久| 男人日女人bb视频| 无码人妻精品一区二区蜜桃百度| 国产aaaaa毛片| 中文字幕日本最新乱码视频| 青青草影院在线观看| 欧美黄色性生活| 熟女少妇在线视频播放| 在线观看成人免费| 国内国产精品天干天干| 久草在在线视频| 国产福利一区视频| av天堂永久资源网| 一二三四视频社区在线| 黄色网在线视频| 四虎4hu永久免费入口| 日本中文字幕在线不卡| 日韩精品视频一二三| 手机在线看福利| 亚洲黄色av网址| 色www免费视频| 亚洲国产日韩欧美在线观看| 熟妇人妻va精品中文字幕| 国产精品丝袜久久久久久消防器材| www.男人天堂网| www..com日韩| 国产女女做受ⅹxx高潮| 激情五月宗合网| 成人免费在线小视频| 成人羞羞国产免费网站| 欧美精品成人网| 在线视频观看91| 韩国黄色一级大片| 国产一级做a爰片久久毛片男| 好色先生视频污| 人人妻人人添人人爽欧美一区| 国产麻花豆剧传媒精品mv在线| 91视频免费版污| 国产乱女淫av麻豆国产| www.18av.com| 精品www久久久久奶水| 男人的天堂最新网址| 日韩不卡一二区| 久久久噜噜噜www成人网| 黄色三级视频片| 国产在线xxxx| 亚洲成人av免费看| 亚洲高清av一区二区三区| www.亚洲成人网| 爱情岛论坛亚洲首页入口章节| 国产农村妇女精品久久| 日韩中字在线观看| 高潮一区二区三区| 97视频在线免费| 日本网站在线看| 成人免费无码av| 欧美日韩视频免费| 在线免费观看视频黄| 日本黄大片在线观看| 777一区二区| 波多野结衣家庭教师视频| 国产性生活一级片| 亚洲黄色a v| 国产成人无码a区在线观看视频| 日韩肉感妇bbwbbwbbw| 亚洲色成人www永久在线观看| 污色网站在线观看| 国产性xxxx18免费观看视频| 国产精品h视频| 黄色在线视频网| 能看的毛片网站| 春日野结衣av| 国内性生活视频| 免费拍拍拍网站| 成人手机在线播放| 日本一区二区免费高清视频| 中文字幕一区二区三区四区在线视频| 妺妺窝人体色777777| 男人天堂网站在线| 神马午夜伦理影院| 在线免费看污网站| 亚洲精品自拍网| 97人人爽人人| 伊人五月天婷婷| 最近中文字幕免费mv|