Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

4 13೥6݄1೔౔༵೔

Slide 8

Slide 8 text

5 13೥6݄1೔౔༵೔

Slide 9

Slide 9 text

6 13೥6݄1೔౔༵೔

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

9 相手の詳細を知らない • 相手の仕事は相手に任せる • 信頼する • 自分の仕事だけに集中する Separation of Concerns 関心事の分離 13೥6݄1೔౔༵೔

Slide 16

Slide 16 text

関心事の分離 • 大きな問題を小さく分けて扱う • Separation of Concerns(SoC) • ソフトウェア開発で常に課題とされてき た • 関心事の分離を促進するために、新し いパラダイムが生まれる 10 13೥6݄1೔౔༵೔

Slide 17

Slide 17 text

アーキテクチャー 11 13೥6݄1೔౔༵೔

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

アーキテクチャー • 分離したものを全体として機能させるた めの、ゆるい制約、基盤 • HTMLとCSSとを分離して扱えるアーキテク チャー • Webデザイナーさん、HTMLコーダーさん は、このアーキテクチャーをベースに 仕事をしている 11 13೥6݄1೔౔༵೔

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

13 13೥6݄1೔౔༵೔

Slide 23

Slide 23 text

14 13೥6݄1೔౔༵೔

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

16 13೥6݄1೔౔༵೔

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

分離の仕方 19 13೥6݄1೔౔༵೔

Slide 34

Slide 34 text

分離の仕方 • MVC • レイヤー化アーキテクチャー • ドメイン駆動設計 • 歴史的なコンポーネント • デザインパターン • オブジェクト指向 • アスペクト(AOP) 20 13೥6݄1೔౔༵೔

Slide 35

Slide 35 text

MVC • モデル、ビュー、コントローラに分けて考え ましょう • 実装にはさまざまなパターンがある 21 13೥6݄1೔౔༵೔

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

PHPでは? • PHP自体は、共通知識を尊重する方向へ向 かっている • PHP 5.3以降のオブジェクト指向機能の 強化、名前空間 • 共通知識を尊重するフレームワーク、コ ンポーネント • Symfony、PHPUnit、Phake、Doctrine Behat、PHPSpec 26 13೥6݄1೔౔༵೔

Slide 46

Slide 46 text

まとめ 27 13೥6݄1೔౔༵೔

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

28 13೥6݄1೔౔༵೔

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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