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.6k
第8回Symfony勉強会 基礎編資料
hidenorigoto
May 26, 2013
Tweet
Share
More Decks by hidenorigoto
See All by hidenorigoto
ドメインと向き合う - 旅行予約編
hidenorigoto
4
780
「ソフトウェア設計」のドメイン - 「データモデリングでドメインを駆動する」を読んで
hidenorigoto
10
2.9k
メルカリ バックエンド領域のこれまでとこれから
hidenorigoto
1
460
メルカリのエンジニアリング組織の変化〜Engineering Managerの視点から〜
hidenorigoto
0
8.1k
The changes of the engineering organization in Mercari - from the view of an engineering manager -
hidenorigoto
0
280
PHPerKaigi 2019 ランチセッション (3/31)
hidenorigoto
1
4k
抽象化って何? (What is abstraction?)
hidenorigoto
9
4.5k
抽象化って何? (What is abstraction?)
hidenorigoto
11
6.7k
続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜
hidenorigoto
14
5.9k
Other Decks in Programming
See All in Programming
Django NinjaによるAPI開発の効率化とリプレースの実践
kashewnuts
1
200
sappoRo.R #12 初心者セッション
kosugitti
0
270
Formの複雑さに立ち向かう
bmthd
1
900
Flutter × Firebase Genkit で加速する生成 AI アプリ開発
coborinai
0
170
未経験でSRE、はじめました! 組織を支える役割と軌跡
curekoshimizu
1
120
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
250
DROBEの生成AI活用事例 with AWS
ippey
0
140
技術を改善し続ける
gumioji
0
110
AIプログラミング雑キャッチアップ
yuheinakasaka
13
3.1k
Honoのおもしろいミドルウェアをみてみよう
yusukebe
1
220
Honoとフロントエンドの 型安全性について
yodaka
7
1.4k
Djangoにおける複数ユーザー種別認証の設計アプローチ@DjangoCongress JP 2025
delhi09
PRO
4
420
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
94
13k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Optimizing for Happiness
mojombo
376
70k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
640
Speed Design
sergeychernyshev
27
800
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
How to Think Like a Performance Engineer
csswizardry
22
1.4k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
250
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༵