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
PHPカンファレンス関西2013「関心を分離するってどういうこと?」講演資料
Search
hidenorigoto
June 02, 2013
Programming
1
1.5k
PHPカンファレンス関西2013「関心を分離するってどういうこと?」講演資料
PHPカンファレンス関西2013 講演資料
hidenorigoto
June 02, 2013
Tweet
Share
More Decks by hidenorigoto
See All by hidenorigoto
ドメインと向き合う - 旅行予約編
hidenorigoto
4
780
「ソフトウェア設計」のドメイン - 「データモデリングでドメインを駆動する」を読んで
hidenorigoto
10
2.9k
メルカリ バックエンド領域のこれまでとこれから
hidenorigoto
1
460
メルカリのエンジニアリング組織の変化〜Engineering Managerの視点から〜
hidenorigoto
0
8.1k
The changes of the engineering organization in Mercari - from the view of an engineering manager -
hidenorigoto
0
280
PHPerKaigi 2019 ランチセッション (3/31)
hidenorigoto
1
4k
抽象化って何? (What is abstraction?)
hidenorigoto
9
4.5k
抽象化って何? (What is abstraction?)
hidenorigoto
11
6.7k
続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜
hidenorigoto
14
5.9k
Other Decks in Programming
See All in Programming
第3回 Snowflake 中部ユーザ会- dbt × Snowflake ハンズオン
hoto17296
4
380
Better Code Design in PHP
afilina
0
160
15分で学ぶDuckDBの可愛い使い方 DuckDBの最近の更新
notrogue
1
340
PHPのバージョンアップ時にも役立ったAST
matsuo_atsushi
0
210
sappoRo.R #12 初心者セッション
kosugitti
0
270
メンテが命: PHPフレームワークのコンテナ化とアップグレード戦略
shunta27
0
280
Unity Android XR入門
sakutama_11
0
170
『GO』アプリ データ基盤のログ収集システムコスト削減
mot_techtalk
0
140
pylint custom ruleで始めるレビュー自動化
shogoujiie
0
140
Serverless Rust: Your Low-Risk Entry Point to Rust in Production (and the benefits are huge)
lmammino
1
140
CSS Linter による Baseline サポートの仕組み
ryo_manba
1
140
GoとPHPのインターフェイスの違い
shimabox
2
200
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
Designing for Performance
lara
604
68k
The Invisible Side of Design
smashingmag
299
50k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Rails Girls Zürich Keynote
gr2m
94
13k
Raft: Consensus for Rubyists
vanstee
137
6.8k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
100
18k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Producing Creativity
orderedlist
PRO
344
40k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
Transcript
関心を分離するって どういうこと? PHPメンターズ 後藤 秀宣 @hidenorigoto 1 PHPカンファレンス関西2013 2013.06.01 136݄1༵
対象の方 2 136݄1༵
対象の方 • なんとなく動くものは作れるけど、より よい作り方を知りたい 2 136݄1༵
対象の方 • なんとなく動くものは作れるけど、より よい作り方を知りたい • 今後もPHPを使い続けていいのか迷ってい る 2 136݄1༵
対象の方 • なんとなく動くものは作れるけど、より よい作り方を知りたい • 今後もPHPを使い続けていいのか迷ってい る • エンジニアとして成長したいが、何を学 ぶべきか分からない
2 136݄1༵
1. HTML 3 136݄1༵
4 136݄1༵
5 136݄1༵
6 136݄1༵
7 全部一体となったHTML HTML 文書の構造と データ CSS 見た目 分離 136݄1༵
8 HTML 文書の 構造と データ CSS 見た目 136݄1༵
8 HTML 文書の 構造と データ CSS 見た目 136݄1༵
8 HTML 文書の 構造と データ CSS 見た目 136݄1༵
8 HTML 文書の 構造と データ CSS 見た目 相手の詳細を 知らない 136݄1༵
9 相手の詳細を知らない • 相手の仕事は相手に任せる • 信頼する • 自分の仕事だけに集中する Separation of
Concerns 関心事の分離 136݄1༵
関心事の分離 • 大きな問題を小さく分けて扱う • Separation of Concerns(SoC) • ソフトウェア開発で常に課題とされてき た
• 関心事の分離を促進するために、新し いパラダイムが生まれる 10 136݄1༵
アーキテクチャー 11 136݄1༵
アーキテクチャー • 分離したものを全体として機能させるた めの、ゆるい制約、基盤 11 136݄1༵
アーキテクチャー • 分離したものを全体として機能させるた めの、ゆるい制約、基盤 • HTMLとCSSとを分離して扱えるアーキテク チャー • Webデザイナーさん、HTMLコーダーさん は、このアーキテクチャーをベースに
仕事をしている 11 136݄1༵
分離のデメリット • HTMLを書く人とCSSを書く人が同じであっ たりする • HTMLとCSSを同時に考えていることも多い • 分かれていることで、思考の中断が起 きる 12
136݄1༵
分離のデメリット • HTMLを書く人とCSSを書く人が同じであっ たりする • HTMLとCSSを同時に考えていることも多い • 分かれていることで、思考の中断が起 きる 12
道具で歴史を進める 136݄1༵
13 136݄1༵
14 136݄1༵
15 command + E 136݄1༵
16 136݄1༵
16 関心事の分離に基 づく構造 136݄1༵
16 関心事の分離に基 づく構造 編集作業時に扱い たい単位での統合 136݄1༵
17 ここまでのまとめ • 関心事を分離して扱う • 分離して扱うための基盤がある • 分離して扱うことで、より大きな、複雑 な問題へ立ち向かっていける 136݄1༵
分離とメンタルモデル 18 136݄1༵
分離とメンタルモデル • 人が現実世界の何かを概念化したもの 18 136݄1༵
分離とメンタルモデル • 人が現実世界の何かを概念化したもの • HTMLとCSSの分離 • 標準的な分離方法 • 話が通じやすい 18
136݄1༵
分離とメンタルモデル • 人が現実世界の何かを概念化したもの • HTMLとCSSの分離 • 標準的な分離方法 • 話が通じやすい 18
分離の仕方 メンタルモデル 136݄1༵
分離の仕方 19 136݄1༵
分離の仕方 • MVC • レイヤー化アーキテクチャー • ドメイン駆動設計 • 歴史的なコンポーネント •
デザインパターン • オブジェクト指向 • アスペクト(AOP) 20 136݄1༵
MVC • モデル、ビュー、コントローラに分けて考え ましょう • 実装にはさまざまなパターンがある 21 136݄1༵
22 レイヤー化アーキテクチャー A B C D E F 136݄1༵
22 レイヤー化アーキテクチャー A B C D E F 136݄1༵
22 レイヤー化アーキテクチャー A B C D E F 136݄1༵
22 レイヤー化アーキテクチャー A B C D E F 136݄1༵
22 レイヤー化アーキテクチャー A B C D E F 136݄1༵
23 ドメイン駆動設計 136݄1༵
23 ドメイン駆動設計 136݄1༵
歴史的なコンポーネント • ルーティング 24 136݄1༵
共通知識 • 関心事の分離方法に、業界で長く使われ てきた手法がある • 先人の知恵・知見 • ベストプラクティス 25 136݄1༵
PHPでは? • PHP自体は、共通知識を尊重する方向へ向 かっている • PHP 5.3以降のオブジェクト指向機能の 強化、名前空間 • 共通知識を尊重するフレームワーク、コ
ンポーネント • Symfony、PHPUnit、Phake、Doctrine Behat、PHPSpec 26 136݄1༵
まとめ 27 136݄1༵
まとめ • 関心事の分離 • 標準的な分け方を知ろう • メンタルモデルを育てよう 27 136݄1༵
まとめ • 関心事の分離 • 標準的な分け方を知ろう • メンタルモデルを育てよう • ソフトウェアエンジニアとして生き残っ ていくための知識となる
27 136݄1༵
まとめ • 関心事の分離 • 標準的な分け方を知ろう • メンタルモデルを育てよう • ソフトウェアエンジニアとして生き残っ ていくための知識となる
• フレームワーク、言語をも超えた知識 27 136݄1༵
まとめ • 関心事の分離 • 標準的な分け方を知ろう • メンタルモデルを育てよう • ソフトウェアエンジニアとして生き残っ ていくための知識となる
• フレームワーク、言語をも超えた知識 • 長く役に立つ 27 136݄1༵
28 136݄1༵
28 堂々と PHPを 使おう! 136݄1༵
29 参考書籍 136݄1༵
ドメイン駆動設計 30 • 基本的な考え方・取 り組み方から、実践 に適用可能なパター ンまで幅広く解説 136݄1༵
PofEAA • 現在のフレームワー ク等でも使われてい るパターンが多数収 録 31 136݄1༵