S-JIS[2011-08-23] 変更履歴

AfwHS α0.003

Asakusa FrameworkScalaで記述してみるAfwHS α版のバージョン0.003の考察。


概要

バージョン0.002では、DMDLから生成したLineModelScalaのケースクラスで作ったLineModelへキャストできなくて例外が発生したので、これを何とかする方法を考えてみる。


仮にどちらかが他方を継承すれば、キャストの問題は解決できそうな気がする。

AfwHSではケースクラスを一番最初に作る考えなので、DMDLで生成するモデルに手を入れるのが良さそう。(データモデルドライバーで編集することが出来るのだし)
運良く、モデルクラスは親クラスが指定されていないので、(まずは手動で)Scalaのケースクラスを親クラスに指定してみたところ、このキャストの問題は解決した。

ただし今度は逆方向の問題がある。

    _.text.split("[ \t]+").foreach{ w => r1.add(WordCountModel(w, 1)) }

Scalaのケースクラスをインスタンス化してResultにaddしている。
これがAsakusaFW側のWordCountModelにキャストできないといけないという理屈になる。

特にWordCountModelは入力側にも出力側にもなる(どちらへもキャストできる必要がある)ので、手詰まり(苦笑)


王道としては、共通のインターフェースを作って、どちらのクラスもそれを実装することだろう。

しかしせっかくScalaのケースクラス機能を使って楽にクラスを作っているのに、そこからインターフェース(トレイト)を自前で用意するのは面倒くさすぎる。
インターフェースを生成する為のツールを作るのも簡単には出来ないし、それを実装させる手間が(ちょっとだけど)かかるのも嫌だ。
(ケースクラス作成→ツールでトレイト生成→元のケースクラスにトレイトを実装、という手間)


そもそもAsakusaFWとしてはDMDLを用意するのが手順の一番最初だし、これを生かす方が良さそう。

という訳で方針転換して、ケースクラスを最初に手で作るのはやめて、DMDLから生成する方向で考えてみる。
データモデルドライバーはJavaソース生成が主目的だけど、Scalaソースを生成してもいいよねw)

使用手順としては、DMDL作成→モデルクラスおよびScalaクラス生成。

そしてバージョン0.004へ


AfwHS目次へ戻る / AsakusaFWへ戻る / 技術メモへ戻る
メールの送信先:ひしだま