FxUG in Toyama - ASphalt2 container -

1,302 views

Published on

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
1,302
On SlideShare
0
From Embeds
0
Number of Embeds
131
Actions
Shares
0
Downloads
3
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

FxUG in Toyama - ASphalt2 container -

  1. 1. Flex’s DIContainer ~ASphalt2 container~ c9katayama Flex3勉強会第73回@北陸 2009-07-04
  2. 2. 自己紹介 名前 片山 暁雄(かたやま あきお) ID c9katayama 所属 T2 Project http://t2framework.org/ 株式会社キャピタルアセットプランニング Flex3勉強会第73回@北陸 2009-07-04
  3. 3. 自己紹介 OSS T2 Project (Java F/W) SDLoader ( Java Web Container) ASphalt2 Flex3勉強会第73回@北陸 2009-07-04
  4. 4. Agenda ASphalt2 conatiner ASphalt2 containerとは 作成動機 基本機能 使い方いろいろ まとめ Flex3勉強会第73回@北陸 2009-07-04
  5. 5. Agenda ASphalt2 containerとは Flex3勉強会第73回@北陸 2009-07-04
  6. 6. ASphalt2 containerとは  ASphalt2 container (アスファルトツーコテナー)  ASphalt2(Flex2 UI Framework)  DIコンテナ  設定ファイル->CSS  プログラマブル設定 Flex3勉強会第73回@北陸 2009-07-04
  7. 7. ASphalt2 containerとは  Apache2 License  http://code.google.com/p/asphalt2/  v0_5_00 Flex3勉強会第73回@北陸 2009-07-04
  8. 8. 作成動機 Flex3勉強会第73回@北陸 2009-07-04
  9. 9. 作成動機  デモ用のアプリケーション作成 まだ通信先が出来てないよ! 接続先が異なるよ! 呼び出し部分は変えたくないよ! ここはつくりたい ここはできてない Flex3勉強会第73回@北陸 2009-07-04
  10. 10. 作成動機  とりいそぎDIコンテナを作ろう 入れ替えるよ 出来たら合体 Flex3勉強会第73回@北陸 2009-07-04
  11. 11. 基本機能 Flex3勉強会第73回@北陸 2009-07-04
  12. 12. 基本機能  DI  クラス構成/ライブラリ構成  インスタンス管理  CSSを使った設定  プログラマブルな設定  メタデータ Flex3勉強会第73回@北陸 2009-07-04
  13. 13. DI Flex3勉強会第73回@北陸 2009-07-04
  14. 14. DI  インジェクション フィールドインジェクション セッターインジェクション メソッドインジェクション  初期化メソッド DI後に呼び出ししてくれる Flex3勉強会第73回@北陸 2009-07-04
  15. 15. DI  設定 CSS AS3  メタデータ [Inject] [Init] Flex3勉強会第73回@北陸 2009-07-04
  16. 16. クラス構成/ライブラリ構成 Flex3勉強会第73回@北陸 2009-07-04
  17. 17. クラス構成  BeanFactoryインターフェース 利用側のインターフェース  CSSBeanFactoryクラス DI・インスタンスの管理を行うクラス var factory:BeanFactory = CSSBeanFactory.getInstance(); //インスタンス取得 var hoge:IHoge = factory.getBeanByType(IHoge); var foo:IFoo = factory.getBean(“foo-foo”); Flex3勉強会第73回@北陸 2009-07-04
  18. 18. クラス構成  必要なswcは1つ asphalt2container.swc Flex3勉強会第73回@北陸 2009-07-04
  19. 19. インスタンス管理 Flex3勉強会第73回@北陸 2009-07-04
  20. 20. インスタンス管理  “prototype”と”singleton”の指定が可能 デフォルトは”singleton” ただし、設定でデフォルト自体を変更可能 //デフォルトをprototypeに変更 CSSBeanFactory.getInstance().defaultScope =CSSBeanFactory.SCOPE_PROTOTYPE //CSSで指定も可 CSSBeanFactory{ default-scope:”prototype”; } Flex3勉強会第73回@北陸 2009-07-04
  21. 21. CSSを使った設定 Flex3勉強会第73回@北陸 2009-07-04
  22. 22. CSSを使った設定  1つのセレクタで、1つのオブジェクト の定義を書く //CSSで指定 IHoge{ bean-type:ClassReference(“hoge.impl.HogeImpl”); value1:1000; value2:”katayama”; value3:”toyama1”,”toyama2”; } Flex3勉強会第73回@北陸 2009-07-04
  23. 23. CSSを使った設定 public class HogeImpl implements IHoge{ public var value:int; public var value2:String; IHoge public car value3:Array; } //CSSで指定 IHoge{ bean- HogeImpl type:ClassReference(“hoge.impl.HogeImpl”); #value1:int value1:1000; #value2:String value2:”katayama”; #value3:Array value3:”toyama1”,”toyama2”; } Flex3勉強会第73回@北陸 2009-07-04
  24. 24. CSSを使った設定  タイプセレクタでインターフェース名、bean- typeプロパティで実クラス名を記述  CSSBeanFactory#getBeanByType()で設定したイ ンスタンスを取得 //CSSで指定 IHoge{ bean-type:ClassReference(“hoge.impl.HogeImpl”); } //取得 var hoge:IHoge = factory.getBeanByType(IHoge); var hoge:IHoge = factory.getBean(“IHoge”); Flex3勉強会第73回@北陸 2009-07-04
  25. 25. CSSを使った設定  クラスセレクタでもOK .hoge-hoge{ bean-type:ClassReference(“hoge.impl.HogeImpl”); } var hoge:IHoge = factory.getBean (“hoge-hoge”); どちらのセレクタも、機能的には変わりない 「.hoge-hoge」の場合 .hoge-hoge hoge-hoge hogeHoge で取得可能。 Flex3勉強会第73回@北陸 2009-07-04
  26. 26. CSSを使った設定  プロパティはそのまま書く。  ほかのbeanをDIする場合は、${}で書く .hogehoge{ bean-type:ClassReference(“hoge.impl.HogeImpl”); bar:12345; foo:”${IFoo}”; } IFoo{ bean-type:ClassReference(“foo.impl.FooImpl”); } Flex3勉強会第73回@北陸 2009-07-04
  27. 27. CSSを使った設定  ドット区切りにして${}で書くと、値をDI 可能 (定数定義の一元化) .hogehoge{ bean-type:ClassReference(“hoge.impl.HogeImpl”); connect-url:”${jdbc.url}”; } jdbc{ url: “jdbc://oresql/toyama:1919”; } Flex3勉強会第73回@北陸 2009-07-04
  28. 28. CSSを使った設定  bean-scope,init-method .hogehoge{ bean-type:ClassReference(“hoge.impl.HogeImpl”); bean-scope:singleton; init-method:”init1”; } Flex3勉強会第73回@北陸 2009-07-04
  29. 29. ところで、何でCSSなの? Flex3勉強会第73回@北陸 2009-07-04
  30. 30. CSSを使った設定  XMLなどの設定ファイルを使用した場合、 クラスがswfファイルに入らない  どこかのクラスに書くか、コンパイル引 数にクラスの一覧を書いたXMLファイル を渡さないとだめ。 CSSなら、「ClassReference()」を使えば SWFにクラスが入る Flex3勉強会第73回@北陸 2009-07-04 demo
  31. 31. CSSを使った設定  XMLなどの設定ファイルの場合、クラス 名が正しいかどうか、コンパイルチェッ クできない CSSなら、「ClassReference()」を使えば コンパイルチェックしてくれる Flex3勉強会第73回@北陸 2009-07-04
  32. 32. CSSを使った設定  設定ファイルだと、リソースが埋め込め ない CSSなら、 「Embed()」を使えば、 画像やSWFムービーをDIできる Flex3勉強会第73回@北陸 2009-07-04
  33. 33. CSSを使った設定 設定の 一元管理は CSS Flex3勉強会第73回@北陸 2009-07-04
  34. 34. プログラマブルな設定 Flex3勉強会第73回@北陸 2009-07-04
  35. 35. プログラマブルな設定  CSSは便利だけど、コードアシストが効 かない  コードベースで設定したい  耐リファクタリング Flex3勉強会第73回@北陸 2009-07-04
  36. 36. プログラマブルな設定  bind().toType()で登録。  toスコープ名でスコープを決められる var factory:BeanFactory = CSSBeanFactory.getInstance(); factory.bind(IHoge).toType(IHogeImpl); factory.bind(IFoo) .toType(IFooImpl) .toPrototypeScope(); var hoge:IHoge = factory.getBeanByType(IHoge); Flex3勉強会第73回@北陸 2009-07-04
  37. 37. プログラマブルな設定  bind().toInstance() でインスタンスを 直に登録 var factory:BeanFactory = CSSBeanFactory.getInstance(); factory.bind(IHoge).toInstance(new IHogeImpl()); var hoge:IHoge = factory.getBeanByType(IHoge); Flex3勉強会第73回@北陸 2009-07-04
  38. 38. プログラマブルな設定  bindConstant()で定数も登録可能 var factory:BeanFactory = CSSBeanFactory.getInstance(); factory.bindConstant(“yone.address”,”富山”); “yone.address”で定数の取得可能 Flex3勉強会第73回@北陸 2009-07-04
  39. 39. プログラマブルな設定  プログラマブルだと、設定が楽  クラスをプログラムに書くので、swfに入 らない可能性がない  MixInなどで設定して、アプリ内で BeanFactory経由で値をとりだす Flex3勉強会第73回@北陸 2009-07-04
  40. 40. メタデータ Flex3勉強会第73回@北陸 2009-07-04
  41. 41. メタデータ  プロパティ・メソッドに付与する  beanについているメタデータを読み取り、 処理する Flex3勉強会第73回@北陸 2009-07-04
  42. 42. メタデータ  [Inject]で、DI対象のプロパティ・メ ソッドを指定  型名からDIするオブジェクトを決定 // “IHoge”に紐付くインスタンスがインジェクトされる [Inject] public var hoge:IHoge; Flex3勉強会第73回@北陸 2009-07-04
  43. 43. メタデータ  name・required属性 name インジェクトするオブジェクト名 CSS,bindしたものどちらもインジェクト 可能 required 値がない場合にエラーにするかどうか デフォルトtrue Flex3勉強会第73回@北陸 2009-07-04
  44. 44. メタデータ [Inject(“hoge”)] public var hoge:IHoge; [Inject(name=“hoge”)] //上と一緒 public var hoge:IHoge; [Inject(name=“yone.address”,required=true)] public var hoge:IHoge; Flex3勉強会第73回@北陸 2009-07-04
  45. 45. メタデータ  Initメタデータ 付与したメソッドが、すべてのDI実施後に実 行される 初期化処理などに利用 [Init] public function initialize():void{} Flex3勉強会第73回@北陸 2009-07-04
  46. 46. 設定に関して Flex3勉強会第73回@北陸 2009-07-04
  47. 47. メタデータ  CSS、プログラマブルどちらでもOK  混在してもOK  CSSで設定したものを、メタデータを 使ってDIすることも可能(逆も可能)  好みに応じて利用 Flex3勉強会第73回@北陸 2009-07-04
  48. 48. 使い方いろいろ Flex3勉強会第73回@北陸 2009-07-04
  49. 49. その1 Flex3勉強会第73回@北陸 2009-07-04
  50. 50. 使い方いろいろ  サービス呼び出し部分を管理 public interface UserAuthService extends IEventDispatcher{ function executeAuth(user:User):void; } Flex3勉強会第73回@北陸 2009-07-04
  51. 51. 使い方いろいろ  開発時は実装クラスを作成 public class DummyUserAuthService extends EventDispatcher implements UserAuthService { public function executeAuth(user:User):void{ dispatchEvent(new ResultEvent(“OK”)); } } Flex3勉強会第73回@北陸 2009-07-04
  52. 52. 使い方いろいろ  サーバ側が出来てから、接続部分作成 public class ServerConnectAuthService extends EventDispatcher implements UserAuthService{ public var url:String; public var connect:URLConnect; public function executeAuth(user:User):void{ connect.load(url,handleResult); } private function handleResult(e:ResultEvent):{ dispatchEvent(e); } } Flex3勉強会第73回@北陸 2009-07-04
  53. 53. 使い方いろいろ  設定ファイルで切り替え UserAuthService{ bean-type: ClassReference(“DummyUserAuthService”); } UserAuthService{ bean-type: ClassReference(“ServerConnectUserAuthService”); url:”http://www.livedoor.co.jp”; } Flex3勉強会第73回@北陸 2009-07-04
  54. 54. 使い方いろいろ  呼び出し側コード var factory:BeanFactory = CSSBeanFactory.getInstance(); var service:UserAuthService = factory.getBeanByType(UserAuthService); service.addEventListener( ResultEvent.RESULT,handleResult); service.executeAuth(user); Flex3勉強会第73回@北陸 2009-07-04
  55. 55. その2 Flex3勉強会第73回@北陸 2009-07-04
  56. 56. 使い方いろいろ  モジュールを使って設定ごと変える var factory:BeanFactory = CSSBeanFactory.getInstance(); factory.addEventListener(Event.COMPLETE,handle); factory.loadModule(“config-module.swf”); Flex3勉強会第73回@北陸 2009-07-04
  57. 57. その3 Flex3勉強会第73回@北陸 2009-07-04
  58. 58. 使い方いろいろ  登録なしでインジェクト var factory:BeanFactory = CSSBeanFactory.getInstance(); factory.inject(this); Flex3勉強会第73回@北陸 2009-07-04
  59. 59. 使い方いろいろ  コンテナに登録できないようなもの  登録しなくてもいいけど、値を入れたい <mx:Application> public class Control <hoge:Control/> implements IMXMLObject{ </mx:Application> [Inject(“prop.hoge”)] public var hoge:String; [Inject] public var service:IService; public function initialized( document:Object, id:String):void{ CSSBeanFactory.getInstance().inject(this); } } Flex3勉強会第73回@北陸 2009-07-04
  60. 60. まとめ Flex3勉強会第73回@北陸 2009-07-04
  61. 61. まとめ  設定や実行クラスを外に出せます  設定自体の切り替えもできます  分かりにくくならない範囲で  ほかのDIコンテナとも比較して  DIコンテナいるのか? Flex3勉強会第73回@北陸 2009-07-04
  62. 62. 謝辞 御清聴 ありがとう ございました Flex3勉強会第73回@北陸 2009-07-04

×