Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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.7k
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
520
Domain modeling with PHP / domain-modeling-with-php-en
shin1x1
1
300
Other Decks in Programming
See All in Programming
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
130
チームをチームにするEM
hitode909
0
320
生成AIを利用するだけでなく、投資できる組織へ
pospome
1
320
ID管理機能開発の裏側 高速にSaaS連携を実現したチームのAI活用編
atzzcokek
0
220
20 years of Symfony, what's next?
fabpot
2
350
配送計画の均等化機能を提供する取り組みについて(⽩⾦鉱業 Meetup Vol.21@六本⽊(数理最適化編))
izu_nori
0
150
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
120
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
1
590
テストやOSS開発に役立つSetup PHP Action
matsuo_atsushi
0
150
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
110
複数人でのCLI/Infrastructure as Codeの暮らしを良くする
shmokmt
5
2.3k
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
160
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
The Invisible Side of Design
smashingmag
302
51k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.2k
Building Adaptive Systems
keathley
44
2.9k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Designing for humans not robots
tammielis
254
26k
Embracing the Ebb and Flow
colly
88
4.9k
Being A Developer After 40
akosma
91
590k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
GraphQLとの向き合い方2022年版
quramy
50
14k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
A Modern Web Designer's Workflow
chriscoyier
698
190k
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