Slide 1

Slide 1 text

基 礎 日本Symfonyユーザー会 PHPメンターズ 後藤 秀宣 @hidenorigoto 1 Symfony勉強会 #8 2013.05.25 13೥5݄26೔೔༵೔

Slide 2

Slide 2 text

後藤秀宣(ごとうひでのり) PHPメンターズ • Symfonyユーザー会 • Symfony Midnight • 翻訳温泉ツアー • WEB+DB PRESS 2 13೥5݄26೔೔༵೔

Slide 3

Slide 3 text

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 13೥5݄26೔೔༵೔

Slide 4

Slide 4 text

キーワード • 分けて考える • レイヤー • ドメイン 4 13೥5݄26೔೔༵೔

Slide 5

Slide 5 text

アジェンダ 1.関心事の分離 2.標準的なフレームワーク 3.新しめの技術(少し) 4.テスタビリティ(DIなど) などについてバラバラと話します 5 13೥5݄26೔೔༵೔

Slide 6

Slide 6 text

1. 関心事の分離 6 13೥5݄26೔೔༵೔

Slide 7

Slide 7 text

関心事の分離 • かんしんじ • Separation of Concerns (SoC) • 分けて考える • 分け方には、いろいろある • 分け方がデファクトスタンダードに従ってい ると、それだけで分かりやすい • 実装時の指針・目安になる 7 13೥5݄26೔೔༵೔

Slide 8

Slide 8 text

分け方 • 粒度大 • MVCアーキテクチャスタイル • レイヤー化アーキテクチャ • ドメイン駆動設計アーキテクチャスタイル • 粒度小 • デザインパターン • 責務駆動設計ステレオタイプ • AOP 8 13೥5݄26೔೔༵೔

Slide 9

Slide 9 text

分け方 • 分かれすぎていることのデメリットもあ る • (ディレクトリ分散、ファイル分散) • が、構造がなさすぎるよりも、分かれ て整理されている方が良い 9 13೥5݄26೔೔༵೔

Slide 10

Slide 10 text

うまく扱う • IDEによるファイルナビゲーション • ショートカットキーなどと併用 • 将来的なIDE • Adobe Edge Code Editor http://html.adobe.com/edge/code/ • (実装面)DI/DIコンテナ 10 13೥5݄26೔೔༵೔

Slide 11

Slide 11 text

11 13೥5݄26೔೔༵೔

Slide 12

Slide 12 text

12 (興味ある方) • DSLエディタ(言語ワークベンチ) • インテンショナルプログラミング 13೥5݄26೔೔༵೔

Slide 13

Slide 13 text

13 レイヤ化アーキテクチャ 13೥5݄26೔೔༵೔

Slide 14

Slide 14 text

14 ドメイン駆動設計 13೥5݄26೔೔༵೔

Slide 15

Slide 15 text

ここまでのまとめ • 分けて考える • 分け方がデファクトスタンダードに従ってい ると、それだけで分かりやすい • 実装時の指針・目安になる 15 13೥5݄26೔೔༵೔

Slide 16

Slide 16 text

2. 標準的な フレームワーク 16 13೥5݄26೔೔༵೔

Slide 17

Slide 17 text

MVC • アーキテクチャスタイル • モデル、ビュー、コントローラに分けて考え ましょう(関心事の分離) • 実装にはさまざまなパターンがある 17 13೥5݄26೔೔༵೔

Slide 18

Slide 18 text

SymfonyのMVC • M・・・ドメインレイヤー • V・・・Twigテンプレート • C・・・コントローラクラス • リクエスト、レスポンス、ルーティング 18 ざっくりとした流れをコードとともに見てみましょう 13೥5݄26೔೔༵೔

Slide 19

Slide 19 text

SymfonyのMVC 19 13೥5݄26೔೔༵೔

Slide 20

Slide 20 text

リクエスト、レスポンス 20 13೥5݄26೔೔༵೔

Slide 21

Slide 21 text

リクエスト、レスポンス • web/app.php(フロントコントローラ) 21 13೥5݄26೔೔༵೔

Slide 22

Slide 22 text

ルーティング、コントローラ 22 13೥5݄26೔೔༵೔

Slide 23

Slide 23 text

ルーティング、コントローラ • src/Acme/DemoBundle/Controller DemoController.php 23 13೥5݄26೔೔༵೔

Slide 24

Slide 24 text

コントローラ、ドメインレイヤー 24 13೥5݄26೔೔༵೔

Slide 25

Slide 25 text

コントローラ、ドメインレイヤー • src/Acme/DemoBundle/Controller DemoController.php等 25 13೥5݄26೔೔༵೔

Slide 26

Slide 26 text

テンプレート、レスポンス 26 13೥5݄26೔೔༵೔

Slide 27

Slide 27 text

テンプレート、レスポンス • src/Acme/DemoBundle/Controller DemoController.php等 27 13೥5݄26೔೔༵೔

Slide 28

Slide 28 text

ここまでのまとめ • Symfonyは標準的なMVCフレームワーク • ごく普通、素直 • かつ洗練されている • 分かりやすい 28 13೥5݄26೔೔༵೔

Slide 29

Slide 29 text

3. 新しめの技術 29 13೥5݄26೔೔༵೔

Slide 30

Slide 30 text

新しめの技術 • 名前空間、PSR • Composerによるインストーラ • アセットパイプライン(Assetic) • アノテーション • ESI(Edge Side Include) 30 13೥5݄26೔೔༵೔

Slide 31

Slide 31 text

4. テスタビリティ 31 13೥5݄26೔೔༵೔

Slide 32

Slide 32 text

テスタビリティ • ユニットテスト、Webテスト対応 • フレームワークのコードに、きち んとしたテストがある • ドメインレイヤーのクラスをピュ アに書ける 32 13೥5݄26೔೔༵೔

Slide 33

Slide 33 text

ユニットテスト • クラス単体のテスト • 依存してるものは・・・? 33 13೥5݄26೔೔༵೔

Slide 34

Slide 34 text

こんなテストしてませんか? 34 ユニット テスト? 何を テストした い? テストデータ を用意してメ ソッドの入出 力をテストし ている 13೥5݄26೔೔༵೔

Slide 35

Slide 35 text

問題 • スローテスト • テストスイートの実行に時間がかかるようになる • テストケースの漏れ • 入出力のパターンが網羅しきれない • テスト作成にかかる手間・時間 • 気軽にテストできない、テストを書けない • リファクタリングの障壁 35 13೥5݄26೔೔༵೔

Slide 36

Slide 36 text

36 契約による設計 • Design by Contract (DbC) • 分けて考える際の基本 • API、インターフェイス 13೥5݄26೔೔༵೔

Slide 37

Slide 37 text

37 ৴པ͢Δ モックで 置き換える 振舞の テスト DBアクセス ライブラリ プロジェクト のコード 13೥5݄26೔೔༵೔

Slide 38

Slide 38 text

38 さらに • 依存オブジェクトをどう取得するか? • とってくる(サービスロケーター) • サービスコンテナが常に必要 • 外から受け取る(依存性注入:DI) • テスト時にミニマムになるのは、DIスタ イル 13೥5݄26೔೔༵೔

Slide 39

Slide 39 text

サービスロケーター 39 13೥5݄26೔೔༵೔

Slide 40

Slide 40 text

テストコード 40 13೥5݄26೔೔༵೔

Slide 41

Slide 41 text

DI 41 13೥5݄26೔೔༵೔

Slide 42

Slide 42 text

テストコード 42 13೥5݄26೔೔༵೔

Slide 43

Slide 43 text

43 フレームワークのテストコード • モックが使われているか? ただし、DIスタイルかサービスロ ケータスタイルかは見極めが必要 13೥5݄26೔೔༵೔

Slide 44

Slide 44 text

44 まとめ 13೥5݄26೔೔༵೔

Slide 45

Slide 45 text

まとめ 45 • ソフトウェアの世界で積み上げられた知 見を学ぼう • ソフトウェアエンジニアとしてブレない 軸を持とう • Symfonyは良い線を行っている 13೥5݄26೔೔༵೔

Slide 46

Slide 46 text

46 参考書籍 13೥5݄26೔೔༵೔

Slide 47

Slide 47 text

ドメイン駆動設計 47 • 基本的な考え方・取 り組み方から、実践 に適用可能なパター ンまで幅広く解説 13೥5݄26೔೔༵೔

Slide 48

Slide 48 text

アジャイルソフトウェア開発の奥義 48 • オブジェクト指向ク ラス設計の原則 (SOLID原則)、ク ラスの安定性等 13೥5݄26೔೔༵೔

Slide 49

Slide 49 text

ジェネレーティブプログラミング • DSL、AOP、インテン ショナルプログラミ ング、ドメイン工学 等包括的に扱う 49 13೥5݄26೔೔༵೔

Slide 50

Slide 50 text

PofEAA • 現在のフレームワー ク等でも使われてい るパターンが多数収 録 50 13೥5݄26೔೔༵೔