2006-02-26(Sun) 2005年12月88日 [長年日記]
■1 PofEAA読書会:第10回
テーブルインヘリタンス3兄弟(Single, Class, Concrete) + Inheritance Mapper。Inheritance Mapperは頓知の利いた設計だと思ったが、このサンプルがC#なのはズルいな、と思った。JavaでもTigerだったら実装できるのかなあ。
予定よりも時間がちょっと余ったので急遽、Embedded Valueパターンをその場で読んだ。音読。第1回とか第2回の経験から、大人数の前で洋書をその場で読むのはキケン、と思っていたので邦訳を声に出して読んでみた——のだが、声に出して読んでも一向にアタマに入ってこない。ちょっと頑張ったけど以下の箇所で沈没。特に最後の一文でノックアウト:
「既存のスキーマにマッピングする場合、メモリ上の複数オブジェクトに分割するデータが、テーブルに含まれているのであれば、組込バリューを使って行う。このような状況が発生する原因は、オブジェクトモデルの振る舞いを抜き出すために、分離したオブジェクトが必要なのだが、データベースでメモリ上にある複数のオブジェクトすべてを1つのエンティティとして扱ってしまう場合である。この場合、Dependentの変更が、Ownerを不確定なオブジェクトとして扱っている(Owner内で置き換えられるバリューオブジェクトにとっては問題ではない)。」(p.289)
ここ、原文では:
「If you're mapping to an existing schema, you can use Embedded Value when a table contains data that you split into more than one object in memory. This may occur because you want a separate object to factor out some behaviour in the object model, but it's all still one entity in the database. In this case you have to be careful that any change to the dependent marks the owner as dirty——which isn't an issue with Value Object that are replaced in the owner.」(p.269)
となっている。もうちょっと声に出して読めるように訳すならば:
「既存のスキーマに対してマッピングするのであれば、テーブルのデータをメモリ上では複数のオブジェクトへと分割したい場合に埋め込みバリューを適用できるだろう。こうした状況が起りうるのは、オブジェクトモデル上では振る舞いを分割されたオブジェクトへと括り出したいのだが、データベース上では単一エンティティのままであるような場合だ。このとき注意しなければならないことは、依存オブジェクトに関するどのような変更も、オーナーオブジェクトをダーティ(変更された状態)にしてしまうということだ。ただし、バリューオブジェクトを使用しており、インスタンスがオーナー側で置き換えられるのであれば、これは問題とはならない。」(拙訳)
みたいな感じでは? 私の訳がこなれているとは言い難いが、これなら声に出しても読めるんじゃないかと思うのだがいかがか。現場では以後、洋書を黙読&その場でサマリ。うむ、わかりやすい。Embedded Valueは、RailsのAWDwRではActive Recordのaggregation/compositionとして紹介されている機能。compose_of。Hibernateだと……componentってやつ?
今回はドタキャン続出でかなーり落ち込んでいたのだけれど、懇親会でid:yyamanoさんに慰めてもらったので次回以降も淡々と開催するよ。次回は3/26(日)の予定です。次でO/Rマッピングのパートが完了する(はず)。
翻訳ネタを出したついでに、シングルテーブル継承の訳
今回の読書会で(も)騒然となった箇所について。シングルテーブル継承(Single Table Inheritance)の以下の箇所:
階層構造全体に、継承マッピングの1つの形式を使う必要はないことを忘れないでほしい。大量の特定のデータを持つクラスに対して、具象テーブル継承を使う場合は、1つのテーブル内にある類似した6つのクラスを完全にマッピングできる。(p.300)
という訳文があるわけだけれども。これに対応する原文は:
Remenber that you don't need to use one form of inheritance mapping for your whole hierarchy. It's perfectly fine to map half a dozen similer classes in a single table, as long as you use Concrete Table Iheritance for any classes that have a lot of specific data.(pp.279-280)
となっている。ううむ。わかりづらいけど:
「忘れないでほしいのだが、継承階層全体につき1種類の継承マッピングしか必要ないというわけではない。固有のデータが多いクラスには具象テーブル継承を利用しておいて、残りの似たようなクラスを単一テーブルへとマッピングするというのでも全く問題ない。」(拙訳)
ってことじゃないのかなあ。訳の巧拙というか日本語として成立してるかどうかの問題のような。いちいち指摘しないが、第12章は会場騒然となる翻訳が多かったように思う。レビュー重要。ヒトフリ・ワガフリ。
慣用句を計算してしまうなんて、邦訳版は頓知がききすぎ。<br>そんな中、何気なく half a dozen をググったら Google電卓に勝手に6と計算されてしまいました。
うわっ、すみません>ドタキャン 次回はちゃんと行きます
Nevermind!
当日はフォローありがとうございました。ググってみたら「half a dozen similar」のひとかたまりで「似たような」という慣用句みたいですね。