Quantcast
Channel: ひしだまの変更履歴
Viewing all articles
Browse latest Browse all 262

JavaBeans・Scala case class・AsakusaFWの類似点・相違点

$
0
0

Asakusa Framework Advent Calendar 2015の10日目です。

RDBのテーブルのデータをJavaで扱う場合、テーブルレイアウトと同等なプロパティー(フィールド)とセッター・ゲッターメソッドを持つJavaBeansのようなクラスを使うことがあるかと思います。

Scalaでは、そういう場合はcase classを使うのが便利です。
フィールドを定義するだけで、セッター・ゲッターメソッドおよびScalaで扱うのに便利なメソッドが自動生成されます。 

AsakusaFWでは、ファイルやRDBのテーブルから読み込んだ1レコード分のデータを扱うのに、データモデルと呼ぶクラスを使用します。
データモデルクラスは、DMDL(データモデル定義言語)というAsakusaFW独自の言語で記述し、コンパイルすることで生成されます。
表面上、データモデルクラスはゲッター・セッターメソッドを持つシンプルなクラスですが、内部ではそれぞれのプロパティーの値をOption系クラスアドベントカレンダー8日目参照)で保持しており、Option系クラスでアクセスするメソッドも提供されています。
また、HadoopのWritable関連のメソッド(シリアライズ・デシリアライズに使う)も実装されています。

Java8のOptionalは基本的にメソッドの戻り値で使うことが推奨されており、普通はフィールドで保持するのには使いません。
が、AsakusaFWで扱う対象であるRDBのテーブルにはnullが入っていることがありますし、CSVファイルで何も入っていない項目はnullとして扱います。また、AsakusaFWのOption系クラスはWritableの機能も持っているので、データモデルクラスのフィールドはOption系クラスで保持するようになっているのだと思います。(データモデルのWritable関連メソッドは、フィールドのOption系クラスのWritable用メソッドを順番に呼ぶような実装になっています)

ちなみに、AsakusaFWのStringOptionは、内部ではHadoopのTextクラスで保持するようになっています。
HadoopのWritableを扱う上ではその方がいいかもしれないですが、今後Hadoop以外を相手にすることになったら、足を引っ張りそうな気がしてちょっと心配です(苦笑)


Viewing all articles
Browse latest Browse all 262

Trending Articles