BEAR.Sunday $app

4,350 views
4,286 views

Published on

about the application of BEAR.Sunday PHP web framework.

0 Comments
15 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,350
On SlideShare
0
From Embeds
0
Number of Embeds
1,698
Actions
Shares
0
Downloads
4
Comments
0
Likes
15
Embeds 0
No embeds

No notes for slide

BEAR.Sunday $app

  1. 1. BEAR.Sunday $appBEAR.Sunday meetup #1 17/Feb/2013 (Sun)
  2. 2. ソフトウエアの原則
  3. 3. 依存関係逆転の原則• 具体的な実装に依存してはいけない• 抽象に依存する• NG スタティックコール × 実クラスに依存• NG サービスロケーター キーで取得できる実装に依存 http://www.flickr.com/photos/rgidra/4256316243/
  4. 4. 生成使用分離の原則• オブジェクトは生成するか利用するかのどち らかで、どちらも同時にしてはいけない• オブジェクトの使用 は抽象 を取り扱う 使用 抽象• オブジェクトの生成 は具象 を取り扱う 生成 具象
  5. 5. デメテルの原則• 最小知識の原則• 必要のないオブジェクトは受け取らない• NG $c = $obj->getB()->getC();• OK $c = $obj->getB()->publicC
  6. 6. Tell, Don t ask.• OK $dog->walk();• OK $model->render();• NG $renderer->set($model- >name)->render();
  7. 7. Solution ?
  8. 8. DI + AOP
  9. 9. インターフェイスとクラスを束縛します
  10. 10. @Injectを付けたメソッドに注入されます
  11. 11. 束縛の集合がモジュールです
  12. 12. モジュールはモジュールを利用できます
  13. 13. 実行モードに応じて束縛は変わりますAPIならJSON出力、Devなら詳細なログ...
  14. 14. 振る舞いモードに応じて振る舞いを変えるのでなく NG
  15. 15. 構成モードに応じて振るを変えます OK修正に閉じ、変更に開いています(OCP)
  16. 16. AOPAspect Oriented Programming
  17. 17. 注釈と横断的関心時を束縛
  18. 18. 注釈を解釈ここでは「クラスに@Dbと注釈がある」&「”on”で始まっている」メソッドにはDBをセットするDBインジェクターを束縛 してい 束縛ます。 DBインジェクターはメソッドによってmaster/slaveを選択しDBオブジェクトを注入します。 利用側、被利用側ともにDB取得の関心が分離されています。
  19. 19. モードに応じた構成で全てが束縛され... Dependency + Aspects
  20. 20. インジェクターでアプリケーションを取得します
  21. 21. アプリケーションは依存を持ちます
  22. 22. 依存も依存を持ちます
  23. 23. 依存の依存..と取得を続け
  24. 24. 巨大な”アプリケーションオブジェクトグラフ”を得ます
  25. 25. アプリケーションはシリアライズ可能で
  26. 26. リクエストを超え再利用されます。アノテーションと束縛を使った膨大なオブジェクトコンストラクションコストは原理的にほとんどなくなります。
  27. 27. コンストラクタはリクエストを超えて1度しかコールされず、そのときプロパティに代入した値はキャッシュされます。構成に応じたコードはコンストラクタ、そうでないものはメソッドと区別できます。
  28. 28. アプリケーションはスクリプトでも取得できます
  29. 29. 他のシステムからの利用が容易ですより長期間の運用を可能にします
  30. 30. アプリケーションスクリプトでサービスを記述 自由な構成が可能です
  31. 31. アプリケーションオブジェクトまとめ• DI/AOPでOOP原則に従う• アプリケーションは1つの変数、巨大な オブジェクトグラフ• スクリプトから準備なしに取得できる• アプリケーションスクリプトでサービス を記述

×