今日はNamespaceの実践的な使い方についてです。

以前、Namespaceを使ってAPIやWebサーバーのURLを開発用とか本番用に切り替える方法をさらっと紹介したのを太郎のエントリーで思い出したので、もう少し実践よりのクラスにしたものをご紹介します。

 カワつくで使っていたAPI切り替えクラスを簡素にまとめたものです。

APIのドメインを管理するクラス

まず開発環境(ローカル)と、社内の確認環境、花王さんの確認環境、本番環境があり、それぞれに反映した際にシームレスに切り替わる仕組みを考える必要がありました。

これをいちいち手作業でやってると手元で動いていたのにいざお客さんにみてもらうときに動かないとかいう危険性があります。ですのであらかじめ要件を洗い出してクラスにまとめたものが下記のコードです。

このクラスでどの環境のURLを使うかを簡単に切り替えることができます。

以前の方法だと利用場面ごとにNamespaceを設定しないといけないので反映が大変だったので、NameSpaceのを利用した切り替え部分をクラス内部に隠蔽しずっとドメインの設定を保持できるようにしました。

private static var server:Namespace;
public static function setWWW():void{
    server = www;
}

public static function getServer():String {
    return server::DOMAIN;
}

このクラスを利用する側からみると具体的にNamespaceを意識する必要はありません。

最初のほうでどの環境で動かすか設定すればよいので、SWFが起動されてるURLなどから自動判定するようにしておけば切り替えや調整のコストも最小ですむかと思います。URLを読み出すときは常にこのクラスを経由するようにつくれば、サーバーが変わることをまったく考えなくても安全に開発ができます。

import jp.nium.external. JavaScript;
var loc:String = JavaScript.locationHref;//Prog4
//var loc:String = Browser.locationHref;//Prog3
switch ( true ) {
	// LOCAL
	case loc == "":
	case loc.indexOf("file:///") != -1:
		WebServer.setLOCAL();
	break;
	// DEV
	case loc.indexOf("stg.") != -1:
		WebServer.setSTG();
	break;
	// STG
	case loc.indexOf("dev.") != -1:
		WebServer.setDEV();
	break;
	// WWW
	default:
		WebServer.setWWW();
	break;
}

URLの取得はProgressionに同梱されてるBrowserクラスを使うと便利です。

さらに僕は合わせて各URLとかAPIもクラスの定数にまとめておくことが多いです。

課題もあります

この方法は便利なのですが、サーバーが複数ある場合に同じような静的クラスを複数用意する必要があり手間です。インスタンス化するとあちこちで参照するのが面倒だしそこらへんの使い勝手はまだ考える必要がありそうです。

HTML5飯