Soumettre la recherche
Mettre en ligne
Laravel aspectで関心の分離
•
1 j'aime
•
2,404 vues
K
Kenjiro Kubota
Suivre
since 2017/07/08
Lire moins
Lire la suite
Logiciels
Signaler
Partager
Signaler
Partager
1 sur 31
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
PingCAP社分散型データベース内部技術概要 製品が気になる方は、下記より問い合わせください。 https://pingcap.com/jp/ AWS とGCP上のフルマネージドサービスは、下記より試してください https://tidbcloud.com/
TiDBのトランザクション
TiDBのトランザクション
Akio Mitobe
2017/11/18 JJUG CCC 2017 Fallでの発表資料です。 #jjug_ccc #ccc_g5
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
JustSystems Corporation
ベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消する
Koichiro Matsuoka
2016/05/25 de:code2016での、渡部の講演資料になります
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
Recruit Technologies
2016/07/15 db tech showcase Tokyo 2016での渡部の講演資料になります
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
Recruit Technologies
YugabyteDBを使ってみよう (NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料) 2022年11月22日(火) NTTデータ 技術開発本部 先進コンピューティング技術センタ 笠原 辰仁
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
2017/9/7 db tech showcase Tokyo 2017(JPOUG in 15 minutes)にて発表した内容です。 SQL大量発行に伴う処理遅延は、ミッションクリティカルシステムでありがちな性能問題のひとつです。 SQLをまとめて発行したり、処理の多重度を上げることができれば高速化可能です。ですが・・・ AP設計に起因する性能問題のため、開発工程の終盤においては対処が難しいことが多々あります。 そのような状況において、どのような改善手段があるのか、Oracleを例に解説します。
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
takezoe
Recommandé
PingCAP社分散型データベース内部技術概要 製品が気になる方は、下記より問い合わせください。 https://pingcap.com/jp/ AWS とGCP上のフルマネージドサービスは、下記より試してください https://tidbcloud.com/
TiDBのトランザクション
TiDBのトランザクション
Akio Mitobe
2017/11/18 JJUG CCC 2017 Fallでの発表資料です。 #jjug_ccc #ccc_g5
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
JustSystems Corporation
ベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消する
ベロシティを上手く使って 技術的負債を計画的に解消する
Koichiro Matsuoka
2016/05/25 de:code2016での、渡部の講演資料になります
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
Recruit Technologies
2016/07/15 db tech showcase Tokyo 2016での渡部の講演資料になります
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
Recruit Technologies
YugabyteDBを使ってみよう (NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料) 2022年11月22日(火) NTTデータ 技術開発本部 先進コンピューティング技術センタ 笠原 辰仁
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
2017/9/7 db tech showcase Tokyo 2017(JPOUG in 15 minutes)にて発表した内容です。 SQL大量発行に伴う処理遅延は、ミッションクリティカルシステムでありがちな性能問題のひとつです。 SQLをまとめて発行したり、処理の多重度を上げることができれば高速化可能です。ですが・・・ AP設計に起因する性能問題のため、開発工程の終盤においては対処が難しいことが多々あります。 そのような状況において、どのような改善手段があるのか、Oracleを例に解説します。
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
takezoe
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
Takahiro Inoue
DBマイグレーションツールのFlywayとER図生成ツールのSchemaSpyの紹介です。
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
詳説データベースの分散合意の章の解説です
詳説データベース輪読会: 分散合意その2
詳説データベース輪読会: 分散合意その2
Sho Nakazono
Acroquest Technology LTxRT 人生がときめくAPIテスト自動化 with Karate Sparking Joy for API Testing Automation
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
拡張機能Delivery Plansのハンズオンコンテンツです。Azure DevOps Labsのコンテンツを日本語化したものになっています。
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
Takunori Minamisawa
Concepts and tools of logging in Java. Javaにおけるログ出力の考え方と道具について説明. CC Attribution Licenseの元に公開します.
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
第三回カーネル/VM探検隊でLuaVMに関してLTをした資料です
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
Yuki Tamura
2020 年 4 月 27 日(月) 第 10 回 Google Cloud INSIDE Games & Apps Online Google Cloud 篠原 一徳によるセッション スライドです。
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Platform - Japan
とうとうGAしたイチオシの最強最速データ分析基盤 Azure Data Explorer をつかってゲームのBig Data 分析をしよう
Azure Data Explorer
Azure Data Explorer
Daisuke Masubuchi
2019.5.30 Microsoft de:code 2019 CD10トラックで講演した資料です。
Azureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流について
真吾 吉田
Azure Database for MySQL / PostgreSQLに関するウェビナーで使用した資料
Azure Database for MySQL PostgreSQLを使って運用の手間を省きませんか?
Azure Database for MySQL PostgreSQLを使って運用の手間を省きませんか?
Suguru Ito
ES6,Node.js,npm,sass,typescript,angular,react...フロントエンドはあまりにもめまぐるしく、JavaScriptカウボーイですら暴れ馬から振り落とされ気味です。この勉強会では、フロントエンド技術の良し悪しではなくとにかく便利なものは使ってみようという視点から、src/main/java, src/main/resources のようなソースコードツリーにフロントエンド技術を取り入れる足がかりについて、ハンズオン形式でお送りします。
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
Y Watanabe
MMAPv1, WiredTigerについても詳細に説明しています
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
Yahoo!ニュースにおけるコンフルエンス上のドキュメント管理の事例紹介について話をします。
Yahoo! ニュースにおけるドキュメント管理の事例紹介
Yahoo! ニュースにおけるドキュメント管理の事例紹介
Yahoo!デベロッパーネットワーク
PostgreSQLカンファレンス2015の講演資料
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
Yoshinori Nakanishi
2014年2月7日、OSS推進フォーラム クラウド技術部会にて発表したMongoDBの入門プレゼンです。
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
Naruhiko Ogasawara
第二回ゲームサーバ勉強会での発表資料
分割と整合性と戦う
分割と整合性と戦う
Yugo Shimizu
2013年8月31日のJAWS-UG 千葉團のLT資料です。
みんな大好き“全文検索 on AWS”を試してみました!
みんな大好き“全文検索 on AWS”を試してみました!
宗 大栗
年単位でトラブルを起こさないための考え方についてまとめました。システムがトラブル続きだとビジネス速度がどんどん落ちていくので、気をつけましょう。
WayOfNoTrouble.pptx
WayOfNoTrouble.pptx
Daisuke Yamazaki
トランザクション処理可能な分散DB 「YugabyteDB」入門 (Open Source Conference 2022 Online/Fukuoka 発表資料) 2022年11月26日(土) NTTデータ 技術開発本部 先進コンピューティング技術センタ 笠原 辰仁
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
NTT DATA Technology & Innovation
Shizuoka.php #1
いまどき(これから)のPHP開発
いまどき(これから)のPHP開発
Kenjiro Kubota
Business.vue vol.1
アイスタイル特設サイトにおけるVue.js導入事例(再演)
アイスタイル特設サイトにおけるVue.js導入事例(再演)
Kenjiro Kubota
Contenu connexe
Tendances
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
Takahiro Inoue
DBマイグレーションツールのFlywayとER図生成ツールのSchemaSpyの紹介です。
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
詳説データベースの分散合意の章の解説です
詳説データベース輪読会: 分散合意その2
詳説データベース輪読会: 分散合意その2
Sho Nakazono
Acroquest Technology LTxRT 人生がときめくAPIテスト自動化 with Karate Sparking Joy for API Testing Automation
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
拡張機能Delivery Plansのハンズオンコンテンツです。Azure DevOps Labsのコンテンツを日本語化したものになっています。
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
Takunori Minamisawa
Concepts and tools of logging in Java. Javaにおけるログ出力の考え方と道具について説明. CC Attribution Licenseの元に公開します.
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
第三回カーネル/VM探検隊でLuaVMに関してLTをした資料です
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
Yuki Tamura
2020 年 4 月 27 日(月) 第 10 回 Google Cloud INSIDE Games & Apps Online Google Cloud 篠原 一徳によるセッション スライドです。
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Platform - Japan
とうとうGAしたイチオシの最強最速データ分析基盤 Azure Data Explorer をつかってゲームのBig Data 分析をしよう
Azure Data Explorer
Azure Data Explorer
Daisuke Masubuchi
2019.5.30 Microsoft de:code 2019 CD10トラックで講演した資料です。
Azureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流について
真吾 吉田
Azure Database for MySQL / PostgreSQLに関するウェビナーで使用した資料
Azure Database for MySQL PostgreSQLを使って運用の手間を省きませんか?
Azure Database for MySQL PostgreSQLを使って運用の手間を省きませんか?
Suguru Ito
ES6,Node.js,npm,sass,typescript,angular,react...フロントエンドはあまりにもめまぐるしく、JavaScriptカウボーイですら暴れ馬から振り落とされ気味です。この勉強会では、フロントエンド技術の良し悪しではなくとにかく便利なものは使ってみようという視点から、src/main/java, src/main/resources のようなソースコードツリーにフロントエンド技術を取り入れる足がかりについて、ハンズオン形式でお送りします。
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
Y Watanabe
MMAPv1, WiredTigerについても詳細に説明しています
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
Yahoo!ニュースにおけるコンフルエンス上のドキュメント管理の事例紹介について話をします。
Yahoo! ニュースにおけるドキュメント管理の事例紹介
Yahoo! ニュースにおけるドキュメント管理の事例紹介
Yahoo!デベロッパーネットワーク
PostgreSQLカンファレンス2015の講演資料
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
Yoshinori Nakanishi
2014年2月7日、OSS推進フォーラム クラウド技術部会にて発表したMongoDBの入門プレゼンです。
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
Naruhiko Ogasawara
第二回ゲームサーバ勉強会での発表資料
分割と整合性と戦う
分割と整合性と戦う
Yugo Shimizu
2013年8月31日のJAWS-UG 千葉團のLT資料です。
みんな大好き“全文検索 on AWS”を試してみました!
みんな大好き“全文検索 on AWS”を試してみました!
宗 大栗
年単位でトラブルを起こさないための考え方についてまとめました。システムがトラブル続きだとビジネス速度がどんどん落ちていくので、気をつけましょう。
WayOfNoTrouble.pptx
WayOfNoTrouble.pptx
Daisuke Yamazaki
トランザクション処理可能な分散DB 「YugabyteDB」入門 (Open Source Conference 2022 Online/Fukuoka 発表資料) 2022年11月26日(土) NTTデータ 技術開発本部 先進コンピューティング技術センタ 笠原 辰仁
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
NTT DATA Technology & Innovation
Tendances
(20)
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
詳説データベース輪読会: 分散合意その2
詳説データベース輪読会: 分散合意その2
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Azure Data Explorer
Azure Data Explorer
Azureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流について
Azure Database for MySQL PostgreSQLを使って運用の手間を省きませんか?
Azure Database for MySQL PostgreSQLを使って運用の手間を省きませんか?
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Yahoo! ニュースにおけるドキュメント管理の事例紹介
Yahoo! ニュースにおけるドキュメント管理の事例紹介
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
分割と整合性と戦う
分割と整合性と戦う
みんな大好き“全文検索 on AWS”を試してみました!
みんな大好き“全文検索 on AWS”を試してみました!
WayOfNoTrouble.pptx
WayOfNoTrouble.pptx
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
Plus de Kenjiro Kubota
Shizuoka.php #1
いまどき(これから)のPHP開発
いまどき(これから)のPHP開発
Kenjiro Kubota
Business.vue vol.1
アイスタイル特設サイトにおけるVue.js導入事例(再演)
アイスタイル特設サイトにおけるVue.js導入事例(再演)
Kenjiro Kubota
4/18 社内勉強会
gRPC入門
gRPC入門
Kenjiro Kubota
Laravel/Vue.js勉強会 #8 オールスターズ
アイスタイル特設サイトにおけるVue.jsの導入事例
アイスタイル特設サイトにおけるVue.jsの導入事例
Kenjiro Kubota
2/28社内勉強会用
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
Kenjiro Kubota
Web Creators MeetUp 新年!ビアバッシュLT大会 #8
フロントエンドエンジニアが知るべきFirebaseの世界
フロントエンドエンジニアが知るべきFirebaseの世界
Kenjiro Kubota
PHPConference2018スポンサーセッション
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
Kenjiro Kubota
UIT#5
カメラを利用したアプリを作って約1000人で遊んだ話
カメラを利用したアプリを作って約1000人で遊んだ話
Kenjiro Kubota
ProLaboもくもく会#10
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
Kenjiro Kubota
Roppongi.js #5 Sponsor LT
FirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見た
Kenjiro Kubota
Vue.jsのライブラリ作ったから聞いてくれ
introducing vue-wait-component
introducing vue-wait-component
Kenjiro Kubota
HHVM/Hack勉強会 vol.1 20分枠
HHVM/Hackを本番投入した話
HHVM/Hackを本番投入した話
Kenjiro Kubota
PHPerKaigi#2018 LT
HackのAsyncCurlで死んだ話
HackのAsyncCurlで死んだ話
Kenjiro Kubota
Laravel/Vue.js勉強会#2
LaravelでAPI定義を管理する
LaravelでAPI定義を管理する
Kenjiro Kubota
Introduction of CSS design that became popular by 2017
2017: A CSS Design Odyssey
2017: A CSS Design Odyssey
Kenjiro Kubota
phpcon 2017 懇親会LT
Introducing hhvm hack-async
Introducing hhvm hack-async
Kenjiro Kubota
LaraLab vol.1
Responsableを使ったadr実装
Responsableを使ったadr実装
Kenjiro Kubota
社内でLTしたやつ
土日でLineみたいなチャット作ってきた!
土日でLineみたいなチャット作ってきた!
Kenjiro Kubota
Laravel LT Night #1
Viewを活用して複雑化と戦う
Viewを活用して複雑化と戦う
Kenjiro Kubota
since 2017/06/23
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
Kenjiro Kubota
Plus de Kenjiro Kubota
(20)
いまどき(これから)のPHP開発
いまどき(これから)のPHP開発
アイスタイル特設サイトにおけるVue.js導入事例(再演)
アイスタイル特設サイトにおけるVue.js導入事例(再演)
gRPC入門
gRPC入門
アイスタイル特設サイトにおけるVue.jsの導入事例
アイスタイル特設サイトにおけるVue.jsの導入事例
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
フロントエンドエンジニアが知るべきFirebaseの世界
フロントエンドエンジニアが知るべきFirebaseの世界
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
カメラを利用したアプリを作って約1000人で遊んだ話
カメラを利用したアプリを作って約1000人で遊んだ話
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
FirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見た
introducing vue-wait-component
introducing vue-wait-component
HHVM/Hackを本番投入した話
HHVM/Hackを本番投入した話
HackのAsyncCurlで死んだ話
HackのAsyncCurlで死んだ話
LaravelでAPI定義を管理する
LaravelでAPI定義を管理する
2017: A CSS Design Odyssey
2017: A CSS Design Odyssey
Introducing hhvm hack-async
Introducing hhvm hack-async
Responsableを使ったadr実装
Responsableを使ったadr実装
土日でLineみたいなチャット作ってきた!
土日でLineみたいなチャット作ってきた!
Viewを活用して複雑化と戦う
Viewを活用して複雑化と戦う
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
Laravel aspectで関心の分離
1.
LaravelAspectで関心の分離 KenjiroKubota 2017/07/08
2.
Profile Kenjiro Kubota istyle.inc PHP, HHVM/Hack, Javascript DTPDesigner WebDesigner FrontEnginner WebApplicationEngiiner﴾now﴿
3.
関心の分離とは 関心の分離(かんしんのぶんり、英語: separation of
concerns、SoC)とは、ソフトウェア工 学において、プログラムを機能面において可能な限り重複がない、複数の機構に明確に分割 することをいう。ここでいう「関心﴾関心事﴿」とは、プログラムのある機能や振る舞い、目的 のことである。﴾Wikipedia﴿
4.
Aspect﴾AOP﴿とは アスペクト指向プログラミング(アスペクトしこうプログラミング、Aspect Oriented Programming、AOP)は、オブジェクト指向ではうまく分離できない特徴(クラス間を横断 ﴾cross‐cutting﴿ するような機能)を「アスペクト」とみなし、アスペクト記述言語をもちいて 分離して記述することでプログラムに柔軟性をもたせようとする試み。アスペクトの例とし ては、データ転送帯域の制限や例外の処理などがある。Java
にアスペクト指向的要素を追加 したAspectJ が実験的に実装されている。﴾Wikipedia﴿
5.
横断的関心事を解決する手段
6.
代表的なケースはロギング、トランザクション、キャッシュなどが挙げられます
7.
Laravelで利用する際はRay.Aopを用いている以下のライブラリがオススメ(宣伝) ytake/laravel‐aspect
8.
利用ケース ロギング 普通はこんな感じ public function get($id) { Log::info($id); $this‐>logger‐>info($id); } Logファサードを使ったり、コンストラクトインジェクションしたloggerを使ったり...
9.
LaravelAspectを使うと use YtakeLaravelAspectAnnotationLoggable; class AspectLoggable { /** * @Loggable * @param null $id * @return null */ public function normalLog($id = null) { return $id; } }
10.
利用ケース トランザクション 普通はこんな感じ? public function save(array $params) { DB::beginTransaction(); try { $result = $this‐>eloquent‐>save($params); DB::commit(); return $result; } catch(Exception $e) { DB::rollback(); Log::error($e‐>getMessage()); throw $e; } }
11.
LaravelAspectなら use YtakeLaravelAspectAnnotationTransactional; /** * @Transactional("master") * @LogExceptions */ public function save(array $params) { return $this‐>eloquent‐>save($params); }
12.
アノテーションで関心の分離ができる
13.
他にもデフォルトで便利なアノテーションが用意されてます 詳しくはライブラリのREADEMEを見てください。
14.
LaravelAspectに用意されてるアノテーションも便利なんですが 自分たちのアプリに合わせた独自のアノテーションを作り たいですよね?
15.
サンプルケース 最終ログイン日時の記録
16.
まずはLaravelAspectを導入 $ composer require ‐‐no‐update ytake/laravel‐aspect && composer update
17.
Provider登録 config/app.php 'providers' => [ // added AspectServiceProvider YtakeLaravelAspectAspectServiceProvider::class, // added Artisan Command YtakeLaravelAspectConsoleServiceProvider::class, ]
18.
設定ファイルとかModulesをアプリケーションにコピー $ php artisan ytake:aspect‐module‐publish $ php artisan vendor:publish
19.
こんな感じで追加されます laravel ‐ app ‐ Modules ‐ CacheableModule.php ‐ CacheEvictModule.php ‐ CachePutModule.php ‐ TransactionalModule.php ‐ LoggableModule.php ‐ LogExceptionsModule.php ‐ PostConstructModule.php ‐ RetryOnFailureModule.php ‐ config ‐ ytake‐laravel‐aop.php
20.
独自アノテーションの定義
21.
use DoctrineCommonAnnotationsAnnotation; /** * @Annotation * @Target("METHOD") * Class LastLoginTime */ class LastLoginTime extends Annotation { // } アスペクト利用時は以下の様になる ‐> @LastLoginTime()
22.
インターセプターの定義 ※ アノテーションが実行されるときの挙動を定義
23.
use RayAopMethodInvocation; use RayAopMethodInterceptor; use YtakeLaravelAspectAnnotationAnnotationReaderTrait; class LastLoginTimeInterceptor implements MethodInterceptor { use AnnotationReaderTrait; /** * @param MethodInvocation $invocation * @return object */ public function invoke(MethodInvocation $invocation) { // before $result = $invocation‐>proceed(); // after $user = $result‐>getUser(); $lastLoginTime = app()‐>make(AppServiceLastLoginTime::class); if (!$lastLoginTime‐>update($user)) { throw new ErrorException("Failed Update Last Login Time"); } return $result; } }
24.
// before $result = $invocation‐>proceed(); // after beforeはアノテーションを記述したメソッドが実行される前に実行される。 afterはメソッド実行されたあとに実行される $resultにはそのメソッドの返り値が入ります。
25.
ポイントカットの定義 ※ 特定のアノテーションが実行されるときに起動されるインターセプターを定義
26.
class LastLoginTimePointCut extends CommonPointCut implements PointCutable { /** @var string */ protected $annotation = AppAnnotationLastLoginTime::class; /** * @param Container $app * @return RayAopPointcut */ public function configure(Container $app) { $this‐>setInterceptor(new LastLoginTimeInterceptor); return $this‐>withAnnotatedAnyInterceptor(); } }
27.
モジュールの追加 ※ アノテーションが利用されるクラスを定義する
28.
use AppAspectPointCutLastLoginTimePointCut; use YtakeLaravelAspectModulesAspectModule; class LastLoginTimeModule extends AspectModule { /** @var array */ protected $classes = [ AppHttpControllerLoginController::class, ]; /** * @return LastLoginTimePointCut */ public function registerPointCut() { return new LastLoginTimePointCut; } }
29.
最後にModulesを以下に登録してあげればOK config/ytake‐laravel‐aop.php 'modules' => [ ... // append modules AppModulesLastLoginTimeModule::class, ],
30.
まとめ LaravelAspectをとりあえず導入するだけでも楽々AOPが実現できる 拡張もできるので独自の要件にも対応できる 関心を分離することでいちクラスの責務を追求できるようになります 単一責任の原則
31.
thanks :﴿
Télécharger maintenant