独立したコアレイヤパターンの適用 - fortee 編 - / fortee-meets-independent-core-layer-pattern

Ca17a082a30f4cbfed1d0a6dacbe3af2?s=47 shin1x1
November 30, 2019

独立したコアレイヤパターンの適用 - fortee 編 - / fortee-meets-independent-core-layer-pattern

2019/11/30 大改修!PHPレガシーコードビフォーアフターhttps://phperkaigi.connpass.com/event/155509/

Ca17a082a30f4cbfed1d0a6dacbe3af2?s=128

shin1x1

November 30, 2019
Tweet

Transcript

  1. 独立したコアレイヤパターンの適用 fortee 編 2019/11/30 PHP レガシーコードビフォーアフター @shin1x1

  2. @shin1x1 新原(しんばら) 雅司 1× 1株式会社 Web アプリケーション 開発 技術サポート PHP

    の現場 (Podcast) https://php-genba.shin1x1.com/ 2
  3. Agenda 独立したコアレイヤパターン fortee への適用例 まとめ 3

  4. 独立したコアレイヤパターン 4

  5. 独立したコアレイヤパターン アーキテクチャパターンの一つ システムを 2 つのレイヤに分離 コアレイヤ アプリケーションレイヤ 5

  6. コアレイヤ コアロジック(What )を実装 IO 等の技術詳細は実装しない コアレイヤのみに依存するようにする フレームワークには依存しないのが理想 ただ局所的に依存する場合もある ユースケース、ドメインモデルなど 6

  7. インターフェイス コアレイヤが利用する技術詳細を インターフェイスで定義 DB アクセス Mail 送信 API 呼び出し コアレイヤのコードはインターフェイスを介して

    IO 等の技術詳細を実装 7
  8. アプリケーションレイヤ 技術詳細(How )の実装 コアレイヤで定義したインターフェイスを実装 フレームワーク、ライブラリを活用 UI からコアレイヤの実行(HTTP, CLI など) 8

  9. 9

  10. 10

  11. 11

  12. ポートとアダプタ 12

  13. ポートとアダプタ コアレイヤ: インターフェイス = ポート アプリケーションレイヤ: 実装 = アダプタ 13

  14. ポートとアダプタ アダプタを変えてもコアレイヤには影響しない 14

  15. Ports & Adapters http://www.dossier- andreas.net/software_architecture/ports_and_adapters.html 15

  16. 独立したコアレイヤパターン コアレイヤとアプリケーションレイヤに分離 コアレイヤ: コアロジック アプリケーションレイヤ: UI 、技術詳細 コアレイヤ内での IO 処理

    コアレイヤにインターフェイス定義(ポート) アプリケーションレイヤで実装(アダプタ) 16
  17. fortee への適用 17

  18. fortee @tomzoh さんが、2017/12 から開発 CakePHP 3 で実装 PHP 7.2 (今回デモ用に

    7.4 ) Web ページと API がエンドポイントによって混在 18
  19. パターン適用対象 プロポーザルに Fav を付ける、外す API POST /sample-conference/proposal/fav uuid = プロポーザルを示す

    UUID on = true なら Fav を付ける。それ以外なら外 す。 19
  20. 適用手順 [core] コントローラのコードをユースケースに移行 HTTP Request 等で必要な値は引数で渡す HTTP Reponse 等で必要な値は戻り値で返す IO

    関連の処理はインターフェイス(ポート)化 [core] ユースケースのテスト [app] アダプタ実装 [app] コントローラからユースケースを実行 20
  21. demo 21

  22. コードを役割でグループ分け コントローラメソッドに全てのコードがある 役割によってグループ分け HTTP Request / Response IO (RDBMS) Business

    Logic 22
  23. レイヤに分ける HTTP Request / Response ---> アプリケーションレイヤ(Controller ) IO (RDBMS)

    ---> コアレイヤ(ポート) ---> アプリケーションレイヤ(アダプタ) Business Logic ---> コアレイヤ(ユースケース) 23
  24. 既存実装への適用アイデア 漸進的に進める ロジックは同じでパターン適用 テスト後にロジックをリファクタリング コアレイヤが完成したらコントローラから実行 適用する箇所を絞る 単純な読み込みだけなら適用しない ビュー用の読み込みはコントローラに残す 24

  25. まとめ コアレイヤは、どこから呼ばれても良い Web, CLI, test コアレイヤは、IO の実装を知らなくて良い コアレイヤの適用箇所を少しづつ増やす 0 or

    100 ではなく、除々に 25
  26. Q? @shin1x1 26