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
1.7k
第8回Symfony勉強会 基礎編資料
hidenorigoto
May 26, 2013
Tweet
Share
More Decks by hidenorigoto
See All by hidenorigoto
ドメインと向き合う - 旅行予約編
hidenorigoto
4
950
「ソフトウェア設計」のドメイン - 「データモデリングでドメインを駆動する」を読んで
hidenorigoto
10
3.2k
メルカリ バックエンド領域のこれまでとこれから
hidenorigoto
1
540
メルカリのエンジニアリング組織の変化〜Engineering Managerの視点から〜
hidenorigoto
0
8.4k
The changes of the engineering organization in Mercari - from the view of an engineering manager -
hidenorigoto
0
310
PHPerKaigi 2019 ランチセッション (3/31)
hidenorigoto
1
4.1k
抽象化って何? (What is abstraction?)
hidenorigoto
9
4.6k
抽象化って何? (What is abstraction?)
hidenorigoto
11
7.1k
続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜
hidenorigoto
14
6.1k
Other Decks in Programming
See All in Programming
Deep Dive into Kotlin Flow
jmatsu
1
350
Testing Trophyは叫ばない
toms74209200
0
880
CJK and Unicode From a PHP Committer
youkidearitai
PRO
0
110
AIを活用し、今後に備えるための技術知識 / Basic Knowledge to Utilize AI
kishida
22
5.8k
Performance for Conversion! 分散トレーシングでボトルネックを 特定せよ
inetand
0
890
print("Hello, World")
eddie
2
530
HTMLの品質ってなんだっけ? “HTMLクライテリア”の設計と実践
unachang113
4
2.9k
1から理解するWeb Push
dora1998
7
1.9k
Swift Updates - Learn Languages 2025
koher
2
490
より安全で効率的な Go コードへ: Protocol Buffers Opaque API の導入
shwatanap
1
160
複雑なフォームに立ち向かう Next.js の技術選定
macchiitaka
2
160
はじめてのMaterial3 Expressive
ym223
2
850
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
525
40k
Music & Morning Musume
bryan
46
6.8k
Fireside Chat
paigeccino
39
3.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
13k
Balancing Empowerment & Direction
lara
3
620
How STYLIGHT went responsive
nonsquared
100
5.8k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Practical Orchestrator
shlominoach
190
11k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
A Modern Web Designer's Workflow
chriscoyier
696
190k
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༵