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