Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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