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
1
320
メルカリのエンジニアリング組織の変化〜Engineering Managerの視点から〜
hidenorigoto
0
7.5k
The changes of the engineering organization in Mercari - from the view of an engineering manager -
hidenorigoto
0
230
PHPerKaigi 2019 ランチセッション (3/31)
hidenorigoto
1
3.6k
抽象化って何? (What is abstraction?)
hidenorigoto
9
4k
抽象化って何? (What is abstraction?)
hidenorigoto
11
5.2k
続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜
hidenorigoto
14
5.2k
SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則編(拡大版)〜
hidenorigoto
6
4.7k
SOLIDの原則ってどんなふうに使うの?
hidenorigoto
50
28k
Other Decks in Programming
See All in Programming
Catch Up with Swift 5.10
ojun9
1
450
PHP で読む楽しいコアダンプ
sji
0
220
Reckoner の Scala プロジェクトにおける オブザーバビリティの取り組み / Observability Initiatives in Reckoner's Scala Project
nomadblacky
0
820
WasmOS: Wasmを実行する自作Microkernel
riru
0
360
decksh - a little language for decks
ajstarks
4
18k
Spring Boot 2 to Spring Boot 3 with Java 21 and Jakarta EE
ivargrimstad
0
820
document.write再考
brn
5
1.9k
Deno に Web 標準 API を実装する / Implementing Web Standard API to Deno
petamoriken
0
310
マイクロサービスがほしいと思ったときに本当に必要だったもの〜なぜ人は共通基盤の夢を見るのか〜 / why microservice
77web
4
810
Faster, greener, and happier- why Quarkus should be your next tech stack
hollycummins
0
130
Cloud RunとCloud PubSubでサーバレスなデータ基盤2024 with Terraform / Cloud Run and PubSub with Terraform
shinyorke
7
1.7k
PHPerライフをChrome拡張開発でちょっと便利に / PR TIMES x DMM.com
meihei3
0
190
Featured
See All Featured
In The Pink: A Labor of Love
frogandcode
137
21k
Embracing the Ebb and Flow
colly
78
4.1k
Building Better People: How to give real-time feedback that sticks.
wjessup
350
18k
Rails Girls Zürich Keynote
gr2m
91
13k
Infographics Made Easy
chrislema
237
17k
Practical Orchestrator
shlominoach
180
9.6k
Navigating Team Friction
lara
177
13k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
101
6.6k
Web development in the modern age
philhawksworth
201
10k
Code Reviewing Like a Champion
maltzj
512
39k
How to train your dragon (web standard)
notwaldorf
71
5k
Being A Developer After 40
akosma
56
580k
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༵