内部クラス、無名クラスのことでぼやいていたので、そんじゃ、どうすればいいか書いてなかった。
入社1年目のシステムエンジニアやプログラマに、教えていた方法で、経路情報のパース処理について設計、実装を書いておく。
JSONデータの構造は、こちら Google Directions API を参考にした
RouteJsonParser.java
import org.json.JSONObject; /** * @author Ryan's Factory * */ public class RouteJsonParser { private JSONObject jsonRoute = null; private String status = ""; private List<Routes> routes = null; class Routes { private String summary = ""; private List<Legs> legs = null; private String waypoint_order = ""; private List<OverviewPolyline> overview_polyline = null; private String bounds = ""; private String copyrights = ""; private String warnings = ""; } class Legs { private List<Steps> steps = null; private Distance distance = null; private Duration duration = null; private ArrivalTime arrival_time = null; private String departure_time = ""; //Time オブジェクト? private String start_location = ""; private String end_location = ""; private String start_address = ""; private String end_address = ""; } class OverviewPolyline { } class Steps { private String html_instructions = ""; private Distance distance = null; private Duration duration = null; private String start_location = ""; private String end_location = ""; private List<Steps> sub_steps = null; private TransitDetails transit_details = null; } class Distance { } class Duration { } class ArrivalTime { } class TransitDetails { // 乗り換えについては後で設計する } RouteJsonParser() { } public List<Routes> parse(String jsonString) { return routes; } }
書かれていたドキュメントを信じて(?)そのままをクラス構造としている。
実装するアトリビュート、オブジェクトはこの段階では具体的に書けないが、少なくとも、Jsonであることがわかっているので、基本を String と JSONObject にしている。
ドキュメントには配列の記述があるが、配列のままでは、メモリアロケーションに問題がある。
どういうことかと簡単に説明すると、配列の要素数が可変する場合、そのつどアロケーションしなければならないので、ListかMapのほうが効率がよい。
List or Map のどちらにするか?
Mapのほうが扱いやすいが、格納順序も考慮しなければいけないようなので、Listが最適だろうと判断する。
その他のオブジェクトについて判明しているのは、内部クラスで記述している。
Javaの利点、クラス設計が考えているままを記述できる。
元のデータが、構造化および機能などが設計されているので、そのままを書ける。
現段階では、内部クラスだが、設計が進めば外部クラスにしなければならないオブジェクトが見えてくる。
実装がなくても、コンパイルができるので、ほかのチームに迷惑がかからない(笑)
コーディングは文章です。Javaという言語を用いて、相手が内容を理解できるように書くのが基本です。
ソースを見れば、書いた人間のひととなりがうかがえます。
読みやすいソースは、ストーリをそのまま受け入れられます。
読みにくいソースは、ストーリが混乱したままよくわかりません。