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
第8回Symfony勉強会 基礎編資料
Search
hidenorigoto
May 26, 2013
Programming
1.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
第8回Symfony勉強会 基礎編資料
hidenorigoto
May 26, 2013
More Decks by hidenorigoto
See All by hidenorigoto
ドメインと向き合う - 旅行予約編
hidenorigoto
4
1.2k
「ソフトウェア設計」のドメイン - 「データモデリングでドメインを駆動する」を読んで
hidenorigoto
10
3.5k
メルカリ バックエンド領域のこれまでとこれから
hidenorigoto
1
610
メルカリのエンジニアリング組織の変化〜Engineering Managerの視点から〜
hidenorigoto
0
8.7k
The changes of the engineering organization in Mercari - from the view of an engineering manager -
hidenorigoto
0
340
PHPerKaigi 2019 ランチセッション (3/31)
hidenorigoto
1
4.5k
抽象化って何? (What is abstraction?)
hidenorigoto
9
4.8k
抽象化って何? (What is abstraction?)
hidenorigoto
11
7.5k
続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜
hidenorigoto
14
6.4k
Other Decks in Programming
See All in Programming
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
260
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
570
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
150
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4k
OSもどきOS
arkw
0
550
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
540
TAKTでAI駆動開発の品質を設計する
j5ik2o
6
1.2k
Vite+ Unified Toolchain for the Web
naokihaba
0
290
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
120
net-httpのHTTP/2対応について
naruse
0
480
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
依存関係から依存物へ―Dependencyという言葉の歴史をひも解く
j_lee
0
110
Featured
See All Featured
The Curious Case for Waylosing
cassininazir
1
380
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
230
Building Adaptive Systems
keathley
44
3k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
320
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Amusing Abliteration
ianozsvald
1
200
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
450
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
940
Mind Mapping
helmedeiros
PRO
1
250
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Transcript
基 礎 日本Symfonyユーザー会 PHPメンターズ 後藤 秀宣 @hidenorigoto 1 Symfony勉強会 #8
2013.05.25 135݄26༵
後藤秀宣(ごとうひでのり) PHPメンターズ • Symfonyユーザー会 • Symfony Midnight • 翻訳温泉ツアー •
WEB+DB PRESS 2 135݄26༵
WEB+DB PRESS #wdpress • 巨人の肩からPHP • vol.69 Behatによる振舞駆動開発 • vol.70
Phake,Mockeryによるオブジェクト指向プログラミング • vol.71 SymfonyではじめるDI • vol.72 HTTPでのキャッシュとESI • vol.73 BEAR.SundayでRESTfulなWeb開発 • vol.74 TYPO3 Flowでドメイン駆動設計入門 • vol.75 (Symfony Config) 3 135݄26༵
キーワード • 分けて考える • レイヤー • ドメイン 4 135݄26༵
アジェンダ 1.関心事の分離 2.標準的なフレームワーク 3.新しめの技術(少し) 4.テスタビリティ(DIなど) などについてバラバラと話します 5 135݄26༵
1. 関心事の分離 6 135݄26༵
関心事の分離 • かんしんじ • Separation of Concerns (SoC) • 分けて考える
• 分け方には、いろいろある • 分け方がデファクトスタンダードに従ってい ると、それだけで分かりやすい • 実装時の指針・目安になる 7 135݄26༵
分け方 • 粒度大 • MVCアーキテクチャスタイル • レイヤー化アーキテクチャ • ドメイン駆動設計アーキテクチャスタイル •
粒度小 • デザインパターン • 責務駆動設計ステレオタイプ • AOP 8 135݄26༵
分け方 • 分かれすぎていることのデメリットもあ る • (ディレクトリ分散、ファイル分散) • が、構造がなさすぎるよりも、分かれ て整理されている方が良い 9
135݄26༵
うまく扱う • IDEによるファイルナビゲーション • ショートカットキーなどと併用 • 将来的なIDE • Adobe Edge
Code Editor http://html.adobe.com/edge/code/ • (実装面)DI/DIコンテナ 10 135݄26༵
11 135݄26༵
12 (興味ある方) • DSLエディタ(言語ワークベンチ) • インテンショナルプログラミング 135݄26༵
13 レイヤ化アーキテクチャ 135݄26༵
14 ドメイン駆動設計 135݄26༵
ここまでのまとめ • 分けて考える • 分け方がデファクトスタンダードに従ってい ると、それだけで分かりやすい • 実装時の指針・目安になる 15 135݄26༵
2. 標準的な フレームワーク 16 135݄26༵
MVC • アーキテクチャスタイル • モデル、ビュー、コントローラに分けて考え ましょう(関心事の分離) • 実装にはさまざまなパターンがある 17 135݄26༵
SymfonyのMVC • M・・・ドメインレイヤー • V・・・Twigテンプレート • C・・・コントローラクラス • リクエスト、レスポンス、ルーティング 18
ざっくりとした流れをコードとともに見てみましょう 135݄26༵
SymfonyのMVC 19 135݄26༵
リクエスト、レスポンス 20 135݄26༵
リクエスト、レスポンス • web/app.php(フロントコントローラ) 21 135݄26༵
ルーティング、コントローラ 22 135݄26༵
ルーティング、コントローラ • src/Acme/DemoBundle/Controller DemoController.php 23 135݄26༵
コントローラ、ドメインレイヤー 24 135݄26༵
コントローラ、ドメインレイヤー • src/Acme/DemoBundle/Controller DemoController.php等 25 135݄26༵
テンプレート、レスポンス 26 135݄26༵
テンプレート、レスポンス • src/Acme/DemoBundle/Controller DemoController.php等 27 135݄26༵
ここまでのまとめ • Symfonyは標準的なMVCフレームワーク • ごく普通、素直 • かつ洗練されている • 分かりやすい 28
135݄26༵
3. 新しめの技術 29 135݄26༵
新しめの技術 • 名前空間、PSR • Composerによるインストーラ • アセットパイプライン(Assetic) • アノテーション •
ESI(Edge Side Include) 30 135݄26༵
4. テスタビリティ 31 135݄26༵
テスタビリティ • ユニットテスト、Webテスト対応 • フレームワークのコードに、きち んとしたテストがある • ドメインレイヤーのクラスをピュ アに書ける 32
135݄26༵
ユニットテスト • クラス単体のテスト • 依存してるものは・・・? 33 135݄26༵
こんなテストしてませんか? 34 ユニット テスト? 何を テストした い? テストデータ を用意してメ ソッドの入出
力をテストし ている 135݄26༵
問題 • スローテスト • テストスイートの実行に時間がかかるようになる • テストケースの漏れ • 入出力のパターンが網羅しきれない •
テスト作成にかかる手間・時間 • 気軽にテストできない、テストを書けない • リファクタリングの障壁 35 135݄26༵
36 契約による設計 • Design by Contract (DbC) • 分けて考える際の基本 •
API、インターフェイス 135݄26༵
37 ৴པ͢Δ モックで 置き換える 振舞の テスト DBアクセス ライブラリ プロジェクト のコード
135݄26༵
38 さらに • 依存オブジェクトをどう取得するか? • とってくる(サービスロケーター) • サービスコンテナが常に必要 • 外から受け取る(依存性注入:DI)
• テスト時にミニマムになるのは、DIスタ イル 135݄26༵
サービスロケーター 39 135݄26༵
テストコード 40 135݄26༵
DI 41 135݄26༵
テストコード 42 135݄26༵
43 フレームワークのテストコード • モックが使われているか? ただし、DIスタイルかサービスロ ケータスタイルかは見極めが必要 135݄26༵
44 まとめ 135݄26༵
まとめ 45 • ソフトウェアの世界で積み上げられた知 見を学ぼう • ソフトウェアエンジニアとしてブレない 軸を持とう • Symfonyは良い線を行っている
135݄26༵
46 参考書籍 135݄26༵
ドメイン駆動設計 47 • 基本的な考え方・取 り組み方から、実践 に適用可能なパター ンまで幅広く解説 135݄26༵
アジャイルソフトウェア開発の奥義 48 • オブジェクト指向ク ラス設計の原則 (SOLID原則)、ク ラスの安定性等 135݄26༵
ジェネレーティブプログラミング • DSL、AOP、インテン ショナルプログラミ ング、ドメイン工学 等包括的に扱う 49 135݄26༵
PofEAA • 現在のフレームワー ク等でも使われてい るパターンが多数収 録 50 135݄26༵