2007/11/11
今回の目玉はFormatterです。サブクラスを定義しなくとも、動的にシリアライズのフォーマットを変化させることができます。
SixxContext applyFormatters: {SixxMockLiteralArrayFormatter on: Array} while: [
array sixxString.
]
とすると、いつものArrayのフォーマット書き出しが、SixxMockLiteralArrayFormatterの方へと移譲されます。
'<sixx.object sixx.id="0" sixx.type="Array" sixx.formatter="SixxMockLiteralArrayFormatter" >
<sixx.object sixx.id="1" sixx.type="String" >#(1 2 3 4 5)</sixx.object>
</sixx.object>'
書き出されたSIXXには、新たなattributeであるsixx.formatter="フォーマッタ名"が埋め込まれます。SIXX読み込み時には、同名のFrmatterがイメージ内にあれば、デシリアライズが移譲されるというわけです。
「インスタンスの状態に応じてシリアライズのフォーマットを最適化したい」等の場合に有効です。
お試しください。
その他の機能はこちら。
リッチな機能を提供しつつも、比較的シンプルに収まっているのはSmalltalkの威力であると思います。
記事を見てコメントする | 友だちに紹介する
Posted in Uncategorized |
Leave a Comment »
2007/10/27
主な特徴として
- #sixxNonReferencableInstVarNames フックの追加
- 参照形式を使わずに常にそのまま書かれるインスタンス変数を定義できます。これはコンパクトなリテラルで表現できるオブジェクトなどをいちいち参照で書いているとSIXXのテキストファイルとしてのリーダビリティが落ちるという意見を反映したものです。
- "Formatter"のサポート
- Formatterとは、サブクラスを定義せずに特定クラスのSIXXフォーマットを動的にカスタマイズする仕組みです。例えばArrayやBagのイン スタンスなどで、場合によっては非常にsparseだったり冗長なオブジェクトが要素に含まれているときに、専用のサブクラスを定義しなくとも、インスタ ンスの状況に応じたフォーマットでオブジェクトを書き出すことができるというものです。
- ShapeChangerのリファクタリング
- もともとクラス定義の変更に柔軟に対応するための仕組みですが、いままではSixxShapeChangeReadStreamという専用の ReadStreamを使う必要がありました。今回からは、もっと簡単に#readSixxFrom:の前にコンテキストにShapeChangerを登 録すれば良いだけとなりました。(従来のやり方もサポートしています)
shapeChangers := {#SixxMockFixedNewFailedClass->SixxMockFixedAlternativeClass} as: Dictionary.
SixxContext applyShapeChangers: shapeChangers while: [
object := Object readSixxFrom: oldSixx.
].
などとなります。Formatterもほぼ同様の使い勝手です。
11月はじめに正式リリースの予定です。
記事を見てコメントする | 友だちに紹介する
Posted in Uncategorized |
Leave a Comment »