独立したコアレイヤパターンの適用 - fortee 編 - / fortee-meets-independent-core-layer-pattern
by
shin1x1
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
独立したコアレイヤパターンの適用 fortee 編 2019/11/30 PHP レガシーコードビフォーアフター @shin1x1
Slide 2
Slide 2 text
@shin1x1 新原(しんばら) 雅司 1× 1株式会社 Web アプリケーション 開発 技術サポート PHP の現場 (Podcast) https://php-genba.shin1x1.com/ 2
Slide 3
Slide 3 text
Agenda 独立したコアレイヤパターン fortee への適用例 まとめ 3
Slide 4
Slide 4 text
独立したコアレイヤパターン 4
Slide 5
Slide 5 text
独立したコアレイヤパターン アーキテクチャパターンの一つ システムを 2 つのレイヤに分離 コアレイヤ アプリケーションレイヤ 5
Slide 6
Slide 6 text
コアレイヤ コアロジック(What )を実装 IO 等の技術詳細は実装しない コアレイヤのみに依存するようにする フレームワークには依存しないのが理想 ただ局所的に依存する場合もある ユースケース、ドメインモデルなど 6
Slide 7
Slide 7 text
インターフェイス コアレイヤが利用する技術詳細を インターフェイスで定義 DB アクセス Mail 送信 API 呼び出し コアレイヤのコードはインターフェイスを介して IO 等の技術詳細を実装 7
Slide 8
Slide 8 text
アプリケーションレイヤ 技術詳細(How )の実装 コアレイヤで定義したインターフェイスを実装 フレームワーク、ライブラリを活用 UI からコアレイヤの実行(HTTP, CLI など) 8
Slide 9
Slide 9 text
9
Slide 10
Slide 10 text
10
Slide 11
Slide 11 text
11
Slide 12
Slide 12 text
ポートとアダプタ 12
Slide 13
Slide 13 text
ポートとアダプタ コアレイヤ: インターフェイス = ポート アプリケーションレイヤ: 実装 = アダプタ 13
Slide 14
Slide 14 text
ポートとアダプタ アダプタを変えてもコアレイヤには影響しない 14
Slide 15
Slide 15 text
Ports & Adapters http://www.dossier- andreas.net/software_architecture/ports_and_adapters.html 15
Slide 16
Slide 16 text
独立したコアレイヤパターン コアレイヤとアプリケーションレイヤに分離 コアレイヤ: コアロジック アプリケーションレイヤ: UI 、技術詳細 コアレイヤ内での IO 処理 コアレイヤにインターフェイス定義(ポート) アプリケーションレイヤで実装(アダプタ) 16
Slide 17
Slide 17 text
fortee への適用 17
Slide 18
Slide 18 text
fortee @tomzoh さんが、2017/12 から開発 CakePHP 3 で実装 PHP 7.2 (今回デモ用に 7.4 ) Web ページと API がエンドポイントによって混在 18
Slide 19
Slide 19 text
パターン適用対象 プロポーザルに Fav を付ける、外す API POST /sample-conference/proposal/fav uuid = プロポーザルを示す UUID on = true なら Fav を付ける。それ以外なら外 す。 19
Slide 20
Slide 20 text
適用手順 [core] コントローラのコードをユースケースに移行 HTTP Request 等で必要な値は引数で渡す HTTP Reponse 等で必要な値は戻り値で返す IO 関連の処理はインターフェイス(ポート)化 [core] ユースケースのテスト [app] アダプタ実装 [app] コントローラからユースケースを実行 20
Slide 21
Slide 21 text
demo 21
Slide 22
Slide 22 text
コードを役割でグループ分け コントローラメソッドに全てのコードがある 役割によってグループ分け HTTP Request / Response IO (RDBMS) Business Logic 22
Slide 23
Slide 23 text
レイヤに分ける HTTP Request / Response ---> アプリケーションレイヤ(Controller ) IO (RDBMS) ---> コアレイヤ(ポート) ---> アプリケーションレイヤ(アダプタ) Business Logic ---> コアレイヤ(ユースケース) 23
Slide 24
Slide 24 text
既存実装への適用アイデア 漸進的に進める ロジックは同じでパターン適用 テスト後にロジックをリファクタリング コアレイヤが完成したらコントローラから実行 適用する箇所を絞る 単純な読み込みだけなら適用しない ビュー用の読み込みはコントローラに残す 24
Slide 25
Slide 25 text
まとめ コアレイヤは、どこから呼ばれても良い Web, CLI, test コアレイヤは、IO の実装を知らなくて良い コアレイヤの適用箇所を少しづつ増やす 0 or 100 ではなく、除々に 25
Slide 26
Slide 26 text
Q? @shin1x1 26