SlideShare a Scribd company logo
1 of 23
Download to read offline
PHP Coding
in BEAR.Sunday
  PHP勉強会 28/Feb/2013
テキスト
OOPの原則
依存関係逆転の原則

• 具体的な実装に依存してはいけない
• 抽象に依存する
• NG スタティックコール
  ×                                                      実クラスに依存


• NG サービスロケーター
   キーで取得できる実装に依存




        http://www.flickr.com/photos/rgidra/4256316243/
生成使用分離の原則

• オブジェクトは生成するか利用するかのどち
 らかで、どちらも同時にしてはいけない

• オブジェクトの使用 は抽象 を取り扱う
         使用 抽象

• オブジェクトの生成 は具象 を取り扱う
         生成 具象
デメテルの原則


• 最小知識の原則
• 必要のないオブジェクトは受け取らない
この4つのみ
•オブジェクト自身 ($this->m())
•自分自身が属性として保持しているインスタン
 ス ($this->a ->m())

•自分自身へパラメータとして渡されたオブジェ
 クト ($param->m())

•自分自身のメソッド内で生成したオブジェクト
 ((new A)->m())
デメテルの原則


• NG $c = $obj->getB()->getC();
• OK $c = $obj->getB()->publicC
Tell, Don t Ask.
Tell       Logic

         Logic     Object
                         Val
                   Val


       Object Oriented
Ask
   Logic         Val     Object
                   Val
   Logic




Procedural
Tell, Don t ask.

• OK $dog->walk();
• OK $model->render();
• NG $renderer->set($model-
 >name)->render();
振る舞い
モードに応じて振る舞いを変えるのでなく




           NG
構成
モードに応じて振るを変えます




            OK

修正に閉じ、変更に開いています(OCP)
=開放/閉鎖原則
アプリケーションは依存を持ちます
依存も依存を持ちます
依存の依存..と取得を続け
巨大な”アプリケーションオブジェクトグラフ”を得ます
アプリケーションはシリアライズ可能で
リクエストを超え再利用されます。


アノテーションと束縛を使った膨大なオブジェクトコ
ンストラクションコストは原理的にほとんどなくなり
ます。
コンストラクタはリクエストを超えて1度しかコールさ
れず、そのときプロパティに代入した値はキャッシュ
されます。


構成に応じたコードはコンストラクタ、そうでないも
のはメソッドと区別できます。
これはモデルにインジェクトされたレンダラーです
Object>Renderer>TemplateEngine>Smarty
と構成されています
Smartyがクラス設計的にあまりよくない
(多くのプロパティを持ち過ぎている)事が
オブジェクトグラフから分かります。

More Related Content

What's hot

TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介ao27
 
Angular.jsについてちょっとしゃべる
Angular.jsについてちょっとしゃべるAngular.jsについてちょっとしゃべる
Angular.jsについてちょっとしゃべるMasashi Haga
 
JavaScript入門-基礎編
JavaScript入門-基礎編JavaScript入門-基礎編
JavaScript入門-基礎編mactkg
 
3月度定例会プレゼン資料 張田浩明 最新
3月度定例会プレゼン資料 張田浩明 最新3月度定例会プレゼン資料 張田浩明 最新
3月度定例会プレゼン資料 張田浩明 最新hharita
 
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリAndroidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリYukiya Nakagawa
 
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和schoowebcampus
 
5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめ5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめKohei Kadowaki
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話terurou
 

What's hot (12)

TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介
 
Angular.jsについてちょっとしゃべる
Angular.jsについてちょっとしゃべるAngular.jsについてちょっとしゃべる
Angular.jsについてちょっとしゃべる
 
JavaScript入門-基礎編
JavaScript入門-基礎編JavaScript入門-基礎編
JavaScript入門-基礎編
 
3月度定例会プレゼン資料 張田浩明 最新
3月度定例会プレゼン資料 張田浩明 最新3月度定例会プレゼン資料 張田浩明 最新
3月度定例会プレゼン資料 張田浩明 最新
 
AngularJS入門
AngularJS入門AngularJS入門
AngularJS入門
 
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリAndroidで使えるJSON-Javaライブラリ
Androidで使えるJSON-Javaライブラリ
 
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
 
Xtext&Xtend documents
Xtext&Xtend documentsXtext&Xtend documents
Xtext&Xtend documents
 
5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめ5分でわかる?Backbone.js ことはじめ
5分でわかる?Backbone.js ことはじめ
 
Simo Tutrial
Simo TutrialSimo Tutrial
Simo Tutrial
 
Simo Tutrial
Simo TutrialSimo Tutrial
Simo Tutrial
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話
 

Viewers also liked

A resource oriented framework using the DI/AOP/REST triangle
A resource oriented framework using the DI/AOP/REST triangleA resource oriented framework using the DI/AOP/REST triangle
A resource oriented framework using the DI/AOP/REST triangleAkihito Koriyama
 
Microscopic structure of retina dr paresh varsat
Microscopic structure of retina dr paresh varsat Microscopic structure of retina dr paresh varsat
Microscopic structure of retina dr paresh varsat DrParesh Varsat
 
Dr.s.veni priya 18.2.16 deg cyst tumors
Dr.s.veni priya 18.2.16  deg cyst  tumorsDr.s.veni priya 18.2.16  deg cyst  tumors
Dr.s.veni priya 18.2.16 deg cyst tumorsophthalmgmcri
 
Pinguecula y pterigion
Pinguecula y pterigionPinguecula y pterigion
Pinguecula y pterigionElias Farfan
 
Conjuntivitis, pterigion y pinguecula
Conjuntivitis, pterigion y pingueculaConjuntivitis, pterigion y pinguecula
Conjuntivitis, pterigion y pingueculaNabile Zuñiga
 
Pterygium and its management
Pterygium and its managementPterygium and its management
Pterygium and its managementDr-Anjali Hiroli
 
Visual field testing and interpretation
Visual field testing and interpretationVisual field testing and interpretation
Visual field testing and interpretationRaman Gupta
 
Lacrimal apparatus
Lacrimal apparatusLacrimal apparatus
Lacrimal apparatusAmr Mehrez
 
anatomy and physiology of lacrimal apparatus ppt
anatomy and physiology of lacrimal apparatus  pptanatomy and physiology of lacrimal apparatus  ppt
anatomy and physiology of lacrimal apparatus pptRohit Rao
 
Glaucoma & target iop
Glaucoma & target iopGlaucoma & target iop
Glaucoma & target iopdoseiha5
 

Viewers also liked (16)

Cornea
CorneaCornea
Cornea
 
A resource oriented framework using the DI/AOP/REST triangle
A resource oriented framework using the DI/AOP/REST triangleA resource oriented framework using the DI/AOP/REST triangle
A resource oriented framework using the DI/AOP/REST triangle
 
Microscopic structure of retina dr paresh varsat
Microscopic structure of retina dr paresh varsat Microscopic structure of retina dr paresh varsat
Microscopic structure of retina dr paresh varsat
 
Dr.s.veni priya 18.2.16 deg cyst tumors
Dr.s.veni priya 18.2.16  deg cyst  tumorsDr.s.veni priya 18.2.16  deg cyst  tumors
Dr.s.veni priya 18.2.16 deg cyst tumors
 
Diseases of ocular motility with an emphasis on squint
Diseases of ocular motility with an emphasis on squintDiseases of ocular motility with an emphasis on squint
Diseases of ocular motility with an emphasis on squint
 
Pinguecula y pterigion
Pinguecula y pterigionPinguecula y pterigion
Pinguecula y pterigion
 
Pterigion
PterigionPterigion
Pterigion
 
Keratoconus
KeratoconusKeratoconus
Keratoconus
 
Conjuntivitis, pterigion y pinguecula
Conjuntivitis, pterigion y pingueculaConjuntivitis, pterigion y pinguecula
Conjuntivitis, pterigion y pinguecula
 
Pterygium and its management
Pterygium and its managementPterygium and its management
Pterygium and its management
 
Strabismus-Clinical Examinations
Strabismus-Clinical ExaminationsStrabismus-Clinical Examinations
Strabismus-Clinical Examinations
 
Visual field testing and interpretation
Visual field testing and interpretationVisual field testing and interpretation
Visual field testing and interpretation
 
Lacrimal apparatus
Lacrimal apparatusLacrimal apparatus
Lacrimal apparatus
 
anatomy and physiology of lacrimal apparatus ppt
anatomy and physiology of lacrimal apparatus  pptanatomy and physiology of lacrimal apparatus  ppt
anatomy and physiology of lacrimal apparatus ppt
 
Glaucoma & target iop
Glaucoma & target iopGlaucoma & target iop
Glaucoma & target iop
 
Pinguecula - An overview
Pinguecula - An overviewPinguecula - An overview
Pinguecula - An overview
 

Similar to PHP Coding in BEAR.Sunday

第2回 モデリング勉強会
第2回 モデリング勉強会第2回 モデリング勉強会
第2回 モデリング勉強会hakoika-itwg
 
Laravelの検索機能の実装方法
Laravelの検索機能の実装方法Laravelの検索機能の実装方法
Laravelの検索機能の実装方法yoshitaro yoyo
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】Tomoharu ASAMI
 
Weeklycms20120218
Weeklycms20120218Weeklycms20120218
Weeklycms20120218Yoshi Sakai
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~normalian
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方増田 亨
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話Masahito Zembutsu
 
名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道Shigeru UCHIYAMA
 
Continuous delivery 6
Continuous delivery 6Continuous delivery 6
Continuous delivery 6ShinyaOzawa
 
Ruby on Rails 4.0 勉強会資料
Ruby on Rails 4.0 勉強会資料Ruby on Rails 4.0 勉強会資料
Ruby on Rails 4.0 勉強会資料techscore
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうHishikawa Takuro
 
そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4Shingo Inoue
 
Web本文抽出 using crf
Web本文抽出 using crfWeb本文抽出 using crf
Web本文抽出 using crfShuyo Nakatani
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースHajime Yanagawa
 
Jubatusでマルウェア分類
Jubatusでマルウェア分類Jubatusでマルウェア分類
Jubatusでマルウェア分類Shuzo Kashihara
 
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶjQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶShumpei Shiraishi
 
つながりをゆるふわにしよう Active supprt notifications
つながりをゆるふわにしよう Active supprt notificationsつながりをゆるふわにしよう Active supprt notifications
つながりをゆるふわにしよう Active supprt notificationsTomohiko Himura
 

Similar to PHP Coding in BEAR.Sunday (20)

BEAR.Sunday $app
BEAR.Sunday $appBEAR.Sunday $app
BEAR.Sunday $app
 
第2回 モデリング勉強会
第2回 モデリング勉強会第2回 モデリング勉強会
第2回 モデリング勉強会
 
JSer Class #1
JSer Class #1JSer Class #1
JSer Class #1
 
Laravelの検索機能の実装方法
Laravelの検索機能の実装方法Laravelの検索機能の実装方法
Laravelの検索機能の実装方法
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
 
Weeklycms20120218
Weeklycms20120218Weeklycms20120218
Weeklycms20120218
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
 
Chain of Responsibility
Chain of ResponsibilityChain of Responsibility
Chain of Responsibility
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話
 
名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道
 
Continuous delivery 6
Continuous delivery 6Continuous delivery 6
Continuous delivery 6
 
Ruby on Rails 4.0 勉強会資料
Ruby on Rails 4.0 勉強会資料Ruby on Rails 4.0 勉強会資料
Ruby on Rails 4.0 勉強会資料
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょう
 
そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4
 
Web本文抽出 using crf
Web本文抽出 using crfWeb本文抽出 using crf
Web本文抽出 using crf
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
Jubatusでマルウェア分類
Jubatusでマルウェア分類Jubatusでマルウェア分類
Jubatusでマルウェア分類
 
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶjQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
 
つながりをゆるふわにしよう Active supprt notifications
つながりをゆるふわにしよう Active supprt notificationsつながりをゆるふわにしよう Active supprt notifications
つながりをゆるふわにしよう Active supprt notifications
 

More from Akihito Koriyama

More from Akihito Koriyama (13)

PHPカンファレンス関西2014 「全てを結ぶ力」
PHPカンファレンス関西2014 「全てを結ぶ力」PHPカンファレンス関西2014 「全てを結ぶ力」
PHPカンファレンス関西2014 「全てを結ぶ力」
 
BEAR.Sunday 1.X
BEAR.Sunday 1.XBEAR.Sunday 1.X
BEAR.Sunday 1.X
 
BEAR.Sunday@phpcon2012
BEAR.Sunday@phpcon2012BEAR.Sunday@phpcon2012
BEAR.Sunday@phpcon2012
 
An object graph visualizer for PHP - print_o
An object graph visualizer for PHP - print_oAn object graph visualizer for PHP - print_o
An object graph visualizer for PHP - print_o
 
BEAR.Sunday.meetup #0
BEAR.Sunday.meetup #0BEAR.Sunday.meetup #0
BEAR.Sunday.meetup #0
 
BEAR.Sunday Offline Talk
BEAR.Sunday Offline TalkBEAR.Sunday Offline Talk
BEAR.Sunday Offline Talk
 
BEAR.Sunday Note
BEAR.Sunday NoteBEAR.Sunday Note
BEAR.Sunday Note
 
PHP: Dis Is It
PHP: Dis Is ItPHP: Dis Is It
PHP: Dis Is It
 
The new era of PHP web development.
The new era of PHP web development.The new era of PHP web development.
The new era of PHP web development.
 
BEAR (Suday) design
BEAR (Suday) designBEAR (Suday) design
BEAR (Suday) design
 
BEAR DI
BEAR DIBEAR DI
BEAR DI
 
BEAR Architecture
BEAR ArchitectureBEAR Architecture
BEAR Architecture
 
BEAR v0.9 (Saturday)
BEAR v0.9 (Saturday)BEAR v0.9 (Saturday)
BEAR v0.9 (Saturday)
 

PHP Coding in BEAR.Sunday