Recommended
PDF
PPTX
PDF
PDF
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
PDF
PDF
Awsでつくるapache kafkaといろんな悩み
PDF
ソフトウェア設計における 意思決定とそのレビューの秘訣
PDF
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
PDF
PDF
PDF
PDF
PDF
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
PDF
PPTX
Azure 仮想マシンにおける運用管理・高可用性設計のベストプラクティス
PDF
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
新しいTERASOLUNA Batch Frameworkとは
PDF
PPTX
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
PPTX
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PDF
ストリーム処理を支えるキューイングシステムの選び方
PDF
PDF
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
PDF
3分でわかるAzureでのService Principal
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
PDF
認証機能で学ぶ Laravel 5 アプリケーション
PPTX
Phpフレームワーク 「laravel」でブログを作ろう
More Related Content
PDF
PPTX
PDF
PDF
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
PDF
PDF
Awsでつくるapache kafkaといろんな悩み
PDF
ソフトウェア設計における 意思決定とそのレビューの秘訣
PDF
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
What's hot
PDF
PDF
PDF
PDF
PDF
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
PDF
PPTX
Azure 仮想マシンにおける運用管理・高可用性設計のベストプラクティス
PDF
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
新しいTERASOLUNA Batch Frameworkとは
PDF
PPTX
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
PPTX
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PDF
ストリーム処理を支えるキューイングシステムの選び方
PDF
PDF
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
PDF
3分でわかるAzureでのService Principal
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
Viewers also liked
PDF
認証機能で学ぶ Laravel 5 アプリケーション
PPTX
Phpフレームワーク 「laravel」でブログを作ろう
PDF
PPTX
PDF
PDF
PDF
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
PDF
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
PDF
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PPTX
PDF
PDF
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
PDF
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
PPTX
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
PDF
PPTX
PDF
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
PPTX
PPTX
20151205フルスクラッチcms作成のノウハウ With Laravel
PPTX
More from Masashi Shinbara
PDF
PDF
PDF
PDF
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
PDF
PDF
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
PDF
How to learn Laravel5 application from Authentication
PDF
Azure Websites で作るスケーラブルな PHP アプリケーション
PDF
PDF
PDF
PDF
PHPコードではなく PHPコードの「書き方」を知る
PDF
Heroku で作る
スケーラブルな
PHP アプリケーション
PDF
PDF
PDF
Laravel ユーザなら知っておくべきAuthオートログイン
PDF
PDF
PDF
Vagrant で PHP 開発環境を作る ハンズオン
PDF
Recently uploaded
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector
PPTX
PDF
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」
PDF
さくらインターネットの今 法林リージョン:さくらのAIとか GPUとかイベントとか 〜2026年もバク進します!〜
PDF
PDF
2025→2026宙畑ゆく年くる年レポート_100社を超える企業アンケート総まとめ!!_企業まとめ_1229_3版
PDF
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望
PDF
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis
レイヤードアーキテクチャを意識したPHPアプリケーションの構築 1. 2. 3. 4. OSI参照モデル
(c) 2015 Masashi Shinbara @shin1x1
7.Application
6. Presentation
5. Session
4.Transport
3. Network
2. Data link
1. Physical
5. 6. 7. 8. Fat Model
(c) 2015 Masashi Shinbara @shin1x1
• 1,000行を超える Model
• Model の役割が多すぎる
• DAO / バリデーション / ビジネスロジック等々
9. 10. 11. サービスレイヤを追加
(c) 2015 Masashi Shinbara @shin1x1
• Controller と Model の間のレイヤ
• ビジネスロジックとバリデーションを担う
• 1アクションメソッドに、1サービスクラス
• ビジネスロジックの共通化は、モデル or ビヘイビア
12. 結果
(c) 2015 Masashi Shinbara @shin1x1
• Fat(Controller¦Model) を、ある程度解消
• レイヤは、まだグルーピングの単位
• レイヤ間の依存関係が整理されていない
=> サービスが、セッションを操作等
13. 14. 15. 意識したところ
(c) 2015 Masashi Shinbara @shin1x1
•レイヤ役割を明確にする
•レイヤ間の依存を明確にする
• 上位レイヤが下位レイヤを呼ぶ(逆は無い)
• 下位レイヤはどこから呼ばれるか関知しない
•処理の流れを一方向にする
•サービスを中心に考える
16. 17. レイヤーの役割
(c) 2015 Masashi Shinbara @shin1x1
Routing
Controller
Model
Service
ルーティング、認証、フィルタ
HTTPリクエスト、レスポンス
バリデーション、サービス実行
事前条件検証、ビジネスロジック
データベースアクセス、
エンティティ固有の処理
18. 19. 20. Service
public function update(Reservation $reservation, User $user, array $inputs)
{
if ($user->id !== $reservation->user_id) {
throw new PreconditionException('could_not_update');
}
DB::transaction(function () use ($user, $reservation, $inputs) {
$reservation->book->incrementInventory($reservation->quantity);
$this->store($reservation, $user, $inputs);
});
}
21. Service
public function update(Reservation $reservation, User $user, array $inputs)
{
if ($user->id !== $reservation->user_id) {
throw new PreconditionException('could_not_update');
}
DB::transaction(function () use ($user, $reservation, $inputs) {
$reservation->book->incrementInventory($reservation->quantity);
$this->store($reservation, $user, $inputs);
});
}
事前条件の検証
22. Service
public function update(Reservation $reservation, User $user, array $inputs)
{
if ($user->id !== $reservation->user_id) {
throw new PreconditionException('could_not_update');
}
DB::transaction(function () use ($user, $reservation, $inputs) {
$reservation->book->incrementInventory($reservation->quantity);
$this->store($reservation, $user, $inputs);
});
}
ビジネスロジック
23. 24. リポジトリパターン
(c) 2015 Masashi Shinbara @shin1x1
• リポジトリパターンは採用しなかった
• データストアは、データベースのみ
• テストは、フィクスチャを利用
• サービス以下は、必要な時に分離すれば良い
(利用者は、その影響を受けない)
25. 26. 結果
(c) 2015 Masashi Shinbara @shin1x1
• レイヤの役割に専念できる
• サービスから作るので、何を作るかが明確に
• どこを見れば良いかが分かりやすい
• サービスをどう分割していくかが課題
27. 28. レイヤ間の抽象化
(c) 2015 Masashi Shinbara @shin1x1
• レイヤ間の連携を抽象化する(主にサービス)
• サービスは、interface を implements
コントローラは、interface を操作
• 実際の具象クラスは知らなくて良い
29. 30. DDD - Eric Evans
(c) 2015 Masashi Shinbara @shin1x1
UI
Application
Infrastructure
Domain
31. 32. まとめ
(c) 2015 Masashi Shinbara @shin1x1
• レイヤードアーキテクチャ
• MVC + Service
• Service を中心に、レイヤを意識
• より良いものを模索する旅は続く
33. 34.