ServerConfig
たまにはFlexネタでも。
Flex+BlazeDSを使っている場合、services-config.xmlに書いた内容はswfのどこかに
埋め込まれている。これを上手く使うとFlex側でdestinationの文字列だけを仕様で決めて
RemoteObjectインスタンスを後から生成させて接続させることが出来る。
ポイントはmx.messaging.config.ServerConfigクラスのxmlプロパティ。
こいつが実はservices-config.xmlの内容をそのまま保持しているのでこいつを
うまいことゴニョゴニョしてやると、こんな感じでChannelSetを生成できるので
あとはLazyにRemoteObjectインスタンスをつくってどこかで管理しておけばよい。
this.remotes=new Array(); if (xml.toXMLString() == "<services/>") { return ; } var list:XMLList=xml.service.(@id == "remoting-service").destination; for each(var dest:XML in list) { var destination:String=dest.attribute("id").toString(); var channelSet:ChannelSet=ServerConfig.getChannelSet(destination); var remote:RemoteObject=new RemoteObject(destination); remote.channelSet=channelSet; remotes[destination]=remote; }
あとはDIコンテナでdestinationのあて先でも管理してインジェクトさせれば
アプリケーションコード(Viewも含めて)ではどこに接続するかを全く知る必要がなくなる。
当然RemoteObjectもモックに置き換えれば、画面だけでテストも可能である。
ま、特に難しいことはない。