第8回Symfony勉強会 基礎編資料

第8回Symfony勉強会 基礎編資料

Ba8ecb9f1d269e44056ff4e7dca4c5e0?s=128

hidenorigoto

May 26, 2013
Tweet

Transcript

  1. 基 礎 日本Symfonyユーザー会 PHPメンターズ 後藤 秀宣 @hidenorigoto 1 Symfony勉強会 #8

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

    WEB+DB PRESS 2 13೥5݄26೔೔༵೔
  3. 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೔೔༵೔
  4. キーワード • 分けて考える • レイヤー • ドメイン 4 13೥5݄26೔೔༵೔

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

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

  7. 関心事の分離 • かんしんじ • Separation of Concerns (SoC) • 分けて考える

    • 分け方には、いろいろある • 分け方がデファクトスタンダードに従ってい ると、それだけで分かりやすい • 実装時の指針・目安になる 7 13೥5݄26೔೔༵೔
  8. 分け方 • 粒度大 • MVCアーキテクチャスタイル • レイヤー化アーキテクチャ • ドメイン駆動設計アーキテクチャスタイル •

    粒度小 • デザインパターン • 責務駆動設計ステレオタイプ • AOP 8 13೥5݄26೔೔༵೔
  9. 分け方 • 分かれすぎていることのデメリットもあ る • (ディレクトリ分散、ファイル分散) • が、構造がなさすぎるよりも、分かれ て整理されている方が良い 9

    13೥5݄26೔೔༵೔
  10. うまく扱う • IDEによるファイルナビゲーション • ショートカットキーなどと併用 • 将来的なIDE • Adobe Edge

    Code Editor http://html.adobe.com/edge/code/ • (実装面)DI/DIコンテナ 10 13೥5݄26೔೔༵೔
  11. 11 13೥5݄26೔೔༵೔

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

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

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

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

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

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

  18. SymfonyのMVC • M・・・ドメインレイヤー • V・・・Twigテンプレート • C・・・コントローラクラス • リクエスト、レスポンス、ルーティング 18

    ざっくりとした流れをコードとともに見てみましょう 13೥5݄26೔೔༵೔
  19. SymfonyのMVC 19 13೥5݄26೔೔༵೔

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

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

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

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

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

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

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

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

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

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

  30. 新しめの技術 • 名前空間、PSR • Composerによるインストーラ • アセットパイプライン(Assetic) • アノテーション •

    ESI(Edge Side Include) 30 13೥5݄26೔೔༵೔
  31. 4. テスタビリティ 31 13೥5݄26೔೔༵೔

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

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

  34. こんなテストしてませんか? 34 ユニット テスト? 何を テストした い? テストデータ を用意してメ ソッドの入出

    力をテストし ている 13೥5݄26೔೔༵೔
  35. 問題 • スローテスト • テストスイートの実行に時間がかかるようになる • テストケースの漏れ • 入出力のパターンが網羅しきれない •

    テスト作成にかかる手間・時間 • 気軽にテストできない、テストを書けない • リファクタリングの障壁 35 13೥5݄26೔೔༵೔
  36. 36 契約による設計 • Design by Contract (DbC) • 分けて考える際の基本 •

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

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

    • テスト時にミニマムになるのは、DIスタ イル 13೥5݄26೔೔༵೔
  39. サービスロケーター 39 13೥5݄26೔೔༵೔

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

  41. DI 41 13೥5݄26೔೔༵೔

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

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

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

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

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

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

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

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

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