PHPカンファレンス関西2013「関心を分離するってどういうこと?」講演資料

 PHPカンファレンス関西2013「関心を分離するってどういうこと?」講演資料

PHPカンファレンス関西2013 講演資料

Ba8ecb9f1d269e44056ff4e7dca4c5e0?s=128

hidenorigoto

June 02, 2013
Tweet

Transcript

  1. 関心を分離するって どういうこと? PHPメンターズ 後藤 秀宣 @hidenorigoto 1 PHPカンファレンス関西2013 2013.06.01 13೥6݄1೔౔༵೔

  2. 対象の方 2 13೥6݄1೔౔༵೔

  3. 対象の方 • なんとなく動くものは作れるけど、より よい作り方を知りたい 2 13೥6݄1೔౔༵೔

  4. 対象の方 • なんとなく動くものは作れるけど、より よい作り方を知りたい • 今後もPHPを使い続けていいのか迷ってい る 2 13೥6݄1೔౔༵೔

  5. 対象の方 • なんとなく動くものは作れるけど、より よい作り方を知りたい • 今後もPHPを使い続けていいのか迷ってい る • エンジニアとして成長したいが、何を学 ぶべきか分からない

    2 13೥6݄1೔౔༵೔
  6. 1. HTML 3 13೥6݄1೔౔༵೔

  7. 4 13೥6݄1೔౔༵೔

  8. 5 13೥6݄1೔౔༵೔

  9. 6 13೥6݄1೔౔༵೔

  10. 7 全部一体となったHTML HTML 文書の構造と データ CSS 見た目 分離 13೥6݄1೔౔༵೔

  11. 8 HTML 文書の 構造と データ CSS 見た目 13೥6݄1೔౔༵೔

  12. 8 HTML 文書の 構造と データ CSS 見た目 13೥6݄1೔౔༵೔

  13. 8 HTML 文書の 構造と データ CSS 見た目 13೥6݄1೔౔༵೔

  14. 8 HTML 文書の 構造と データ CSS 見た目 相手の詳細を 知らない 13೥6݄1೔౔༵೔

  15. 9 相手の詳細を知らない • 相手の仕事は相手に任せる • 信頼する • 自分の仕事だけに集中する Separation of

    Concerns 関心事の分離 13೥6݄1೔౔༵೔
  16. 関心事の分離 • 大きな問題を小さく分けて扱う • Separation of Concerns(SoC) • ソフトウェア開発で常に課題とされてき た

    • 関心事の分離を促進するために、新し いパラダイムが生まれる 10 13೥6݄1೔౔༵೔
  17. アーキテクチャー 11 13೥6݄1೔౔༵೔

  18. アーキテクチャー • 分離したものを全体として機能させるた めの、ゆるい制約、基盤 11 13೥6݄1೔౔༵೔

  19. アーキテクチャー • 分離したものを全体として機能させるた めの、ゆるい制約、基盤 • HTMLとCSSとを分離して扱えるアーキテク チャー • Webデザイナーさん、HTMLコーダーさん は、このアーキテクチャーをベースに

    仕事をしている 11 13೥6݄1೔౔༵೔
  20. 分離のデメリット • HTMLを書く人とCSSを書く人が同じであっ たりする • HTMLとCSSを同時に考えていることも多い • 分かれていることで、思考の中断が起 きる 12

    13೥6݄1೔౔༵೔
  21. 分離のデメリット • HTMLを書く人とCSSを書く人が同じであっ たりする • HTMLとCSSを同時に考えていることも多い • 分かれていることで、思考の中断が起 きる 12

    道具で歴史を進める 13೥6݄1೔౔༵೔
  22. 13 13೥6݄1೔౔༵೔

  23. 14 13೥6݄1೔౔༵೔

  24. 15 command + E 13೥6݄1೔౔༵೔

  25. 16 13೥6݄1೔౔༵೔

  26. 16 関心事の分離に基 づく構造 13೥6݄1೔౔༵೔

  27. 16 関心事の分離に基 づく構造 編集作業時に扱い たい単位での統合 13೥6݄1೔౔༵೔

  28. 17 ここまでのまとめ • 関心事を分離して扱う • 分離して扱うための基盤がある • 分離して扱うことで、より大きな、複雑 な問題へ立ち向かっていける 13೥6݄1೔౔༵೔

  29. 分離とメンタルモデル 18 13೥6݄1೔౔༵೔

  30. 分離とメンタルモデル • 人が現実世界の何かを概念化したもの 18 13೥6݄1೔౔༵೔

  31. 分離とメンタルモデル • 人が現実世界の何かを概念化したもの • HTMLとCSSの分離 • 標準的な分離方法 • 話が通じやすい 18

    13೥6݄1೔౔༵೔
  32. 分離とメンタルモデル • 人が現実世界の何かを概念化したもの • HTMLとCSSの分離 • 標準的な分離方法 • 話が通じやすい 18

    分離の仕方 メンタルモデル 13೥6݄1೔౔༵೔
  33. 分離の仕方 19 13೥6݄1೔౔༵೔

  34. 分離の仕方 • MVC • レイヤー化アーキテクチャー • ドメイン駆動設計 • 歴史的なコンポーネント •

    デザインパターン • オブジェクト指向 • アスペクト(AOP) 20 13೥6݄1೔౔༵೔
  35. MVC • モデル、ビュー、コントローラに分けて考え ましょう • 実装にはさまざまなパターンがある 21 13೥6݄1೔౔༵೔

  36. 22 レイヤー化アーキテクチャー A B C D E F 13೥6݄1೔౔༵೔

  37. 22 レイヤー化アーキテクチャー A B C D E F 13೥6݄1೔౔༵೔

  38. 22 レイヤー化アーキテクチャー A B C D E F 13೥6݄1೔౔༵೔

  39. 22 レイヤー化アーキテクチャー A B C D E F 13೥6݄1೔౔༵೔

  40. 22 レイヤー化アーキテクチャー A B C D E F 13೥6݄1೔౔༵೔

  41. 23 ドメイン駆動設計 13೥6݄1೔౔༵೔

  42. 23 ドメイン駆動設計 13೥6݄1೔౔༵೔

  43. 歴史的なコンポーネント • ルーティング 24 13೥6݄1೔౔༵೔

  44. 共通知識 • 関心事の分離方法に、業界で長く使われ てきた手法がある • 先人の知恵・知見 • ベストプラクティス 25 13೥6݄1೔౔༵೔

  45. PHPでは? • PHP自体は、共通知識を尊重する方向へ向 かっている • PHP 5.3以降のオブジェクト指向機能の 強化、名前空間 • 共通知識を尊重するフレームワーク、コ

    ンポーネント • Symfony、PHPUnit、Phake、Doctrine Behat、PHPSpec 26 13೥6݄1೔౔༵೔
  46. まとめ 27 13೥6݄1೔౔༵೔

  47. まとめ • 関心事の分離 • 標準的な分け方を知ろう • メンタルモデルを育てよう 27 13೥6݄1೔౔༵೔

  48. まとめ • 関心事の分離 • 標準的な分け方を知ろう • メンタルモデルを育てよう • ソフトウェアエンジニアとして生き残っ ていくための知識となる

    27 13೥6݄1೔౔༵೔
  49. まとめ • 関心事の分離 • 標準的な分け方を知ろう • メンタルモデルを育てよう • ソフトウェアエンジニアとして生き残っ ていくための知識となる

    • フレームワーク、言語をも超えた知識 27 13೥6݄1೔౔༵೔
  50. まとめ • 関心事の分離 • 標準的な分け方を知ろう • メンタルモデルを育てよう • ソフトウェアエンジニアとして生き残っ ていくための知識となる

    • フレームワーク、言語をも超えた知識 • 長く役に立つ 27 13೥6݄1೔౔༵೔
  51. 28 13೥6݄1೔౔༵೔

  52. 28 堂々と PHPを 使おう! 13೥6݄1೔౔༵೔

  53. 29 参考書籍 13೥6݄1೔౔༵೔

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

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