ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

OperatorのコーディングのTips

2014-12-22 02:42:09 | PG(分散処理)

Asakusa Framework Advent Calendar 2014の22日目です。

今日はOperator DSLをコーディングする際の注意点を2つ紹介します。


まずは、データモデルオブジェクトの使い回しについて。

ConvertExtractCoGroup等では、入力とは異なるデータモデルを新たに出力することが出来ます。
そこで使用する出力用のデータモデルオブジェクトは、Operatorクラスのフィールドに定義しておいて使い回すことが出来ます。

ただし、一旦出力する(Resultのaddに渡す、あるいはConvertでreturnする)と、内容が破壊されます。(厳密には「破壊されることがある」というだけですが、必ず破壊されるものと思っておいた方が無難です)
そのため、データモデルオブジェクトをフィールドに保持することは出来るのですが、使い始める箇所で毎回初期化(resetメソッドを呼び出すか、copyFromで別のオブジェクトから全コピー)するべきです。


2つ目は、Optionクラスを退避させる方法について。

データモデルのプロパティーの値を一時変数に退避させ、そのプロパティーを更新し、退避した値を別に使いたい、というような場合があると思います。
しかしAsakusaFWのOptionクラスは可変オブジェクトなので、退避をOptionクラスで行うと、プロパティーを更新したときに退避したつもりのOptionの内容も一緒に変わってしまいます。
Java8のOptionalScalaのOptionは不変オブジェクト、つまり一旦入れた内容を変更することが出来ないので、こういう問題は起きません)
(AsakusaFWのOptionはインスタンスを使い回すことでインスタンス生成コストを抑えるという考えなのだと思います。それなりの大量データを相手にするので)


注意していないと、なんとなく出来そうに見えるのですが、実際にやるとハマりますorz 


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« フローのテストのTips | トップ | DMDL EditorXの2014年の新機能 »
最新の画像もっと見る

コメントを投稿

PG(分散処理)」カテゴリの最新記事