Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
独立したコアレイヤパターンの適用 - fortee 編 - / fortee-meets-in...
Search
shin1x1
November 30, 2019
Programming
0
3.9k
独立したコアレイヤパターンの適用 - fortee 編 - / fortee-meets-independent-core-layer-pattern
2019/11/30 大改修!PHPレガシーコードビフォーアフター
https://phperkaigi.connpass.com/event/155509/
shin1x1
November 30, 2019
Tweet
Share
More Decks by shin1x1
See All by shin1x1
抽象化という思考のツール - 開発現場での活用 - / Abstraction-as-a-Tool-for-Thinking-in-dev
shin1x1
0
120
抽象化という思考のツール - 理解と活用 - / Abstraction-as-a-Tool-for-Thinking
shin1x1
1
1.2k
php-fpm がリクエスト処理する仕組みを追う / Tracing-How-php-fpm-Handles-Requests
shin1x1
6
3.8k
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
3
2.3k
PHPコードの実行モデルを理解する / Understanding-the-PHP-Execution-Model
shin1x1
2
2.9k
制約の力 - 状態を限定する -
shin1x1
6
5.5k
Apple Silicon Mac 時代の PHP 開発環境構築 2021 / php-dev-env-on-m1-mac-era
shin1x1
2
4.8k
Docker イメージのマルチアーキテクチャビルド / docker-muti-arch-build
shin1x1
1
530
Domain modeling with PHP / domain-modeling-with-php-en
shin1x1
1
300
Other Decks in Programming
See All in Programming
クラウドに依存しないS3を使った開発術
simesaba80
0
200
Vibe codingでおすすめの言語と開発手法
uyuki234
0
140
Java 25, Nuevas características
czelabueno
0
120
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
4.1k
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
170
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
180
Patterns of Patterns
denyspoltorak
0
400
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
140
これならできる!個人開発のすゝめ
tinykitten
PRO
0
140
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
290
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
200
まだ間に合う!Claude Code元年をふりかえる
nogu66
5
920
Featured
See All Featured
The Language of Interfaces
destraynor
162
26k
Six Lessons from altMBA
skipperchong
29
4.1k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
270
Done Done
chrislema
186
16k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
140
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
0
26
Automating Front-end Workflow
addyosmani
1371
200k
Un-Boring Meetings
codingconduct
0
170
Context Engineering - Making Every Token Count
addyosmani
9
570
Navigating Weather and Climate Data
rabernat
0
58
Art, The Web, and Tiny UX
lynnandtonic
304
21k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Transcript
独立したコアレイヤパターンの適用 fortee 編 2019/11/30 PHP レガシーコードビフォーアフター @shin1x1
@shin1x1 新原(しんばら) 雅司 1× 1株式会社 Web アプリケーション 開発 技術サポート PHP
の現場 (Podcast) https://php-genba.shin1x1.com/ 2
Agenda 独立したコアレイヤパターン fortee への適用例 まとめ 3
独立したコアレイヤパターン 4
独立したコアレイヤパターン アーキテクチャパターンの一つ システムを 2 つのレイヤに分離 コアレイヤ アプリケーションレイヤ 5
コアレイヤ コアロジック(What )を実装 IO 等の技術詳細は実装しない コアレイヤのみに依存するようにする フレームワークには依存しないのが理想 ただ局所的に依存する場合もある ユースケース、ドメインモデルなど 6
インターフェイス コアレイヤが利用する技術詳細を インターフェイスで定義 DB アクセス Mail 送信 API 呼び出し コアレイヤのコードはインターフェイスを介して
IO 等の技術詳細を実装 7
アプリケーションレイヤ 技術詳細(How )の実装 コアレイヤで定義したインターフェイスを実装 フレームワーク、ライブラリを活用 UI からコアレイヤの実行(HTTP, CLI など) 8
9
10
11
ポートとアダプタ 12
ポートとアダプタ コアレイヤ: インターフェイス = ポート アプリケーションレイヤ: 実装 = アダプタ 13
ポートとアダプタ アダプタを変えてもコアレイヤには影響しない 14
Ports & Adapters http://www.dossier- andreas.net/software_architecture/ports_and_adapters.html 15
独立したコアレイヤパターン コアレイヤとアプリケーションレイヤに分離 コアレイヤ: コアロジック アプリケーションレイヤ: UI 、技術詳細 コアレイヤ内での IO 処理
コアレイヤにインターフェイス定義(ポート) アプリケーションレイヤで実装(アダプタ) 16
fortee への適用 17
fortee @tomzoh さんが、2017/12 から開発 CakePHP 3 で実装 PHP 7.2 (今回デモ用に
7.4 ) Web ページと API がエンドポイントによって混在 18
パターン適用対象 プロポーザルに Fav を付ける、外す API POST /sample-conference/proposal/fav uuid = プロポーザルを示す
UUID on = true なら Fav を付ける。それ以外なら外 す。 19
適用手順 [core] コントローラのコードをユースケースに移行 HTTP Request 等で必要な値は引数で渡す HTTP Reponse 等で必要な値は戻り値で返す IO
関連の処理はインターフェイス(ポート)化 [core] ユースケースのテスト [app] アダプタ実装 [app] コントローラからユースケースを実行 20
demo 21
コードを役割でグループ分け コントローラメソッドに全てのコードがある 役割によってグループ分け HTTP Request / Response IO (RDBMS) Business
Logic 22
レイヤに分ける HTTP Request / Response ---> アプリケーションレイヤ(Controller ) IO (RDBMS)
---> コアレイヤ(ポート) ---> アプリケーションレイヤ(アダプタ) Business Logic ---> コアレイヤ(ユースケース) 23
既存実装への適用アイデア 漸進的に進める ロジックは同じでパターン適用 テスト後にロジックをリファクタリング コアレイヤが完成したらコントローラから実行 適用する箇所を絞る 単純な読み込みだけなら適用しない ビュー用の読み込みはコントローラに残す 24
まとめ コアレイヤは、どこから呼ばれても良い Web, CLI, test コアレイヤは、IO の実装を知らなくて良い コアレイヤの適用箇所を少しづつ増やす 0 or
100 ではなく、除々に 25
Q? @shin1x1 26