FxUG in Toyama - ASphalt2 container -
Upcoming SlideShare
Loading in...5
×
 

FxUG in Toyama - ASphalt2 container -

on

  • 1,708 views

 

Statistics

Views

Total Views
1,708
Views on SlideShare
1,583
Embed Views
125

Actions

Likes
0
Downloads
1
Comments
1

2 Embeds 125

http://d.hatena.ne.jp 123
http://www.slideshare.net 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • It's cool! :)
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

FxUG in Toyama - ASphalt2 container - FxUG in Toyama - ASphalt2 container - Presentation Transcript

  • Flex’s DIContainer ~ASphalt2 container~ c9katayama Flex3勉強会第73回@北陸 2009-07-04
  • 自己紹介 名前 片山 暁雄(かたやま あきお) ID c9katayama 所属 T2 Project http://t2framework.org/ 株式会社キャピタルアセットプランニング Flex3勉強会第73回@北陸 2009-07-04
  • 自己紹介 OSS T2 Project (Java F/W) SDLoader ( Java Web Container) ASphalt2 Flex3勉強会第73回@北陸 2009-07-04
  • Agenda ASphalt2 conatiner ASphalt2 containerとは 作成動機 基本機能 使い方いろいろ まとめ Flex3勉強会第73回@北陸 2009-07-04
  • Agenda ASphalt2 containerとは Flex3勉強会第73回@北陸 2009-07-04
  • ASphalt2 containerとは  ASphalt2 container (アスファルトツーコテナー)  ASphalt2(Flex2 UI Framework)  DIコンテナ  設定ファイル->CSS  プログラマブル設定 Flex3勉強会第73回@北陸 2009-07-04
  • ASphalt2 containerとは  Apache2 License  http://code.google.com/p/asphalt2/  v0_5_00 Flex3勉強会第73回@北陸 2009-07-04
  • 作成動機 Flex3勉強会第73回@北陸 2009-07-04
  • 作成動機  デモ用のアプリケーション作成 まだ通信先が出来てないよ! 接続先が異なるよ! 呼び出し部分は変えたくないよ! ここはつくりたい ここはできてない Flex3勉強会第73回@北陸 2009-07-04
  • 作成動機  とりいそぎDIコンテナを作ろう 入れ替えるよ 出来たら合体 Flex3勉強会第73回@北陸 2009-07-04
  • 基本機能 Flex3勉強会第73回@北陸 2009-07-04
  • 基本機能  DI  クラス構成/ライブラリ構成  インスタンス管理  CSSを使った設定  プログラマブルな設定  メタデータ Flex3勉強会第73回@北陸 2009-07-04
  • DI Flex3勉強会第73回@北陸 2009-07-04
  • DI  インジェクション フィールドインジェクション セッターインジェクション メソッドインジェクション  初期化メソッド DI後に呼び出ししてくれる Flex3勉強会第73回@北陸 2009-07-04
  • DI  設定 CSS AS3  メタデータ [Inject] [Init] Flex3勉強会第73回@北陸 2009-07-04
  • クラス構成/ライブラリ構成 Flex3勉強会第73回@北陸 2009-07-04
  • クラス構成  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
  • クラス構成  必要なswcは1つ asphalt2container.swc Flex3勉強会第73回@北陸 2009-07-04
  • インスタンス管理 Flex3勉強会第73回@北陸 2009-07-04
  • インスタンス管理  “prototype”と”singleton”の指定が可能 デフォルトは”singleton” ただし、設定でデフォルト自体を変更可能 //デフォルトをprototypeに変更 CSSBeanFactory.getInstance().defaultScope =CSSBeanFactory.SCOPE_PROTOTYPE //CSSで指定も可 CSSBeanFactory{ default-scope:”prototype”; } Flex3勉強会第73回@北陸 2009-07-04
  • CSSを使った設定 Flex3勉強会第73回@北陸 2009-07-04
  • CSSを使った設定  1つのセレクタで、1つのオブジェクト の定義を書く //CSSで指定 IHoge{ bean-type:ClassReference(“hoge.impl.HogeImpl”); value1:1000; value2:”katayama”; value3:”toyama1”,”toyama2”; } Flex3勉強会第73回@北陸 2009-07-04
  • 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
  • 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
  • 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
  • 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
  • CSSを使った設定  ドット区切りにして${}で書くと、値をDI 可能 (定数定義の一元化) .hogehoge{ bean-type:ClassReference(“hoge.impl.HogeImpl”); connect-url:”${jdbc.url}”; } jdbc{ url: “jdbc://oresql/toyama:1919”; } Flex3勉強会第73回@北陸 2009-07-04
  • CSSを使った設定  bean-scope,init-method .hogehoge{ bean-type:ClassReference(“hoge.impl.HogeImpl”); bean-scope:singleton; init-method:”init1”; } Flex3勉強会第73回@北陸 2009-07-04
  • ところで、何でCSSなの? Flex3勉強会第73回@北陸 2009-07-04
  • CSSを使った設定  XMLなどの設定ファイルを使用した場合、 クラスがswfファイルに入らない  どこかのクラスに書くか、コンパイル引 数にクラスの一覧を書いたXMLファイル を渡さないとだめ。 CSSなら、「ClassReference()」を使えば SWFにクラスが入る Flex3勉強会第73回@北陸 2009-07-04 demo
  • CSSを使った設定  XMLなどの設定ファイルの場合、クラス 名が正しいかどうか、コンパイルチェッ クできない CSSなら、「ClassReference()」を使えば コンパイルチェックしてくれる Flex3勉強会第73回@北陸 2009-07-04
  • CSSを使った設定  設定ファイルだと、リソースが埋め込め ない CSSなら、 「Embed()」を使えば、 画像やSWFムービーをDIできる Flex3勉強会第73回@北陸 2009-07-04
  • CSSを使った設定 設定の 一元管理は CSS Flex3勉強会第73回@北陸 2009-07-04
  • プログラマブルな設定 Flex3勉強会第73回@北陸 2009-07-04
  • プログラマブルな設定  CSSは便利だけど、コードアシストが効 かない  コードベースで設定したい  耐リファクタリング Flex3勉強会第73回@北陸 2009-07-04
  • プログラマブルな設定  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
  • プログラマブルな設定  bind().toInstance() でインスタンスを 直に登録 var factory:BeanFactory = CSSBeanFactory.getInstance(); factory.bind(IHoge).toInstance(new IHogeImpl()); var hoge:IHoge = factory.getBeanByType(IHoge); Flex3勉強会第73回@北陸 2009-07-04
  • プログラマブルな設定  bindConstant()で定数も登録可能 var factory:BeanFactory = CSSBeanFactory.getInstance(); factory.bindConstant(“yone.address”,”富山”); “yone.address”で定数の取得可能 Flex3勉強会第73回@北陸 2009-07-04
  • プログラマブルな設定  プログラマブルだと、設定が楽  クラスをプログラムに書くので、swfに入 らない可能性がない  MixInなどで設定して、アプリ内で BeanFactory経由で値をとりだす Flex3勉強会第73回@北陸 2009-07-04
  • メタデータ Flex3勉強会第73回@北陸 2009-07-04
  • メタデータ  プロパティ・メソッドに付与する  beanについているメタデータを読み取り、 処理する Flex3勉強会第73回@北陸 2009-07-04
  • メタデータ  [Inject]で、DI対象のプロパティ・メ ソッドを指定  型名からDIするオブジェクトを決定 // “IHoge”に紐付くインスタンスがインジェクトされる [Inject] public var hoge:IHoge; Flex3勉強会第73回@北陸 2009-07-04
  • メタデータ  name・required属性 name インジェクトするオブジェクト名 CSS,bindしたものどちらもインジェクト 可能 required 値がない場合にエラーにするかどうか デフォルトtrue Flex3勉強会第73回@北陸 2009-07-04
  • メタデータ [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
  • メタデータ  Initメタデータ 付与したメソッドが、すべてのDI実施後に実 行される 初期化処理などに利用 [Init] public function initialize():void{} Flex3勉強会第73回@北陸 2009-07-04
  • 設定に関して Flex3勉強会第73回@北陸 2009-07-04
  • メタデータ  CSS、プログラマブルどちらでもOK  混在してもOK  CSSで設定したものを、メタデータを 使ってDIすることも可能(逆も可能)  好みに応じて利用 Flex3勉強会第73回@北陸 2009-07-04
  • 使い方いろいろ Flex3勉強会第73回@北陸 2009-07-04
  • その1 Flex3勉強会第73回@北陸 2009-07-04
  • 使い方いろいろ  サービス呼び出し部分を管理 public interface UserAuthService extends IEventDispatcher{ function executeAuth(user:User):void; } Flex3勉強会第73回@北陸 2009-07-04
  • 使い方いろいろ  開発時は実装クラスを作成 public class DummyUserAuthService extends EventDispatcher implements UserAuthService { public function executeAuth(user:User):void{ dispatchEvent(new ResultEvent(“OK”)); } } Flex3勉強会第73回@北陸 2009-07-04
  • 使い方いろいろ  サーバ側が出来てから、接続部分作成 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
  • 使い方いろいろ  設定ファイルで切り替え UserAuthService{ bean-type: ClassReference(“DummyUserAuthService”); } UserAuthService{ bean-type: ClassReference(“ServerConnectUserAuthService”); url:”http://www.livedoor.co.jp”; } Flex3勉強会第73回@北陸 2009-07-04
  • 使い方いろいろ  呼び出し側コード var factory:BeanFactory = CSSBeanFactory.getInstance(); var service:UserAuthService = factory.getBeanByType(UserAuthService); service.addEventListener( ResultEvent.RESULT,handleResult); service.executeAuth(user); Flex3勉強会第73回@北陸 2009-07-04
  • その2 Flex3勉強会第73回@北陸 2009-07-04
  • 使い方いろいろ  モジュールを使って設定ごと変える var factory:BeanFactory = CSSBeanFactory.getInstance(); factory.addEventListener(Event.COMPLETE,handle); factory.loadModule(“config-module.swf”); Flex3勉強会第73回@北陸 2009-07-04
  • その3 Flex3勉強会第73回@北陸 2009-07-04
  • 使い方いろいろ  登録なしでインジェクト var factory:BeanFactory = CSSBeanFactory.getInstance(); factory.inject(this); Flex3勉強会第73回@北陸 2009-07-04
  • 使い方いろいろ  コンテナに登録できないようなもの  登録しなくてもいいけど、値を入れたい <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
  • まとめ Flex3勉強会第73回@北陸 2009-07-04
  • まとめ  設定や実行クラスを外に出せます  設定自体の切り替えもできます  分かりにくくならない範囲で  ほかのDIコンテナとも比較して  DIコンテナいるのか? Flex3勉強会第73回@北陸 2009-07-04
  • 謝辞 御清聴 ありがとう ございました Flex3勉強会第73回@北陸 2009-07-04