経路情報をパースする 設計 2

RouteJsonParser の構造は、いまだと必要のないアトリビュートが存在している。

status、class Routes に関連する子や孫たちである。

ストーリを読んでみると、RouteJsonParserさんは大変だ。自分の仕事だけでなく、子供、孫まで面倒見てるんだね。
子供が生まれたらそのつど、かみさんにはまかせておけないから、RouteJsonParserさんが面倒見るんだ、しかもその孫たちまでも、もしかしたら曾孫も面倒見るのかな?

といった感じ!

JSONデータのバージョンが変わったらそのつど、RouteJsonParser を改修し複数のバージョンに対応していく。
・・・ありえん!
これは、内部クラスのひとつの弊害である。
お手伝いしたプロジェクトで、こんな事例によく遭遇した。

なので、RouteJsonParser を書き直します。

public class RouteJsonParser {
	/**
	 * 元になる経路情報 
	 */
	private JSONObject jsonRoute = null;
	/**
	 * パースされた経路情報
	 */
	private List<Routes> routes = null;
	/**
	 * パースできない場合のエラーコード
	 */
	private int error = 0;
	/**
	 * GoogleDirectionsAPI のバージョン
	 * 2014/10/01 現在リリースされているバージョン 1 を初期値とする
	 */
	private int verGoogleDirectionsAPI = 1;
	/**
	 * コンストラクタ
	 * Google Directions API のバージョンは 1
	 */
	public RouteJsonParser() {}
	/**
	 * コンストラクタ
	 * @param ver Google Directions API のバージョン
	 */
	public RouteJsonParser(int ver) {
		verGoogleDirectionsAPI = ver;
	}
	/**
	 * JSONデータをパースする
	 * @param jsonString JSON文字列
	 * @return パースした経路情報
	 */
	public List<Routes> parse(String jsonString) {
		// バージョンごとに対応、JSONデータをパースする
		switch(verGoogleDirectionsAPI) {
		case 1:
			break;

		default:
			
		}
		return routes;
	}
	/**
	 * パースされた経路情報を取得
	 * @return
	 */
	public List<Routes> getParseListt() {
		return routes;
	}
	/**
	 * JSONデータが有効であるか検査する
	 * @return true:有効 false:無効
	 */
	public boolean isSuccess() {
		return true;
	}
	/**
	 * ステータスコードの取得
	 * @return
	 */
	public String getStatus() {
		return "";
	}
	/**
	 * エラーコードを取得
	 * @return
	 */
	public int getError() {
		return error;
	}
}

だいぶすっきり、明確になりました。

ストーリーを読んでみると、
RouteJsonParserさんのお仕事はJSONデータをパースすることで、パースした内容はいつでも引き出せるように保持する。
パースするデータがバージョンの異なるデータが放り込まれても、生まれたときに対応するバージョンが決められているので、決められたことしかしない。なので、生まれる前にバージョンをきめといてね!
パースのお仕事が済んだら、うまくできたか報告することと、ちょっとだけパースした中身のステータスを教えてくれるそうだ.
また、パースできなかった原因も報告してくれるらしい。

こんな感じで、私には読めました。いかがですか?

ちなみに、RouteJsonParserさんに Routesさんのことを聞いてみました。
「俺、Routesさんと付き合ってるんだけど、よく知らないんだ」
とのお答えでした。
以前のソースでは結婚し子供まで作っていたのに・・・・

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>