・部分集合型が何故必要になるのか?
データベースからO/Rマッピングを行なうときのことを考えてみよう。もちろん、O/Rマッピングは、C#のreflectionを用いて自動的に行なわれるものとする。
例えば、以下にカスタム属性を用いて、自動的に「CREATE TABLE」文を生成するサンプルがある。
http://d.hatena.ne.jp/akiramei/20040527
ところが、O/Rマッピングには、DB上のすべてのフィールドをオブジェクトにマッピングするわけではなく、特定のフィールドのみをマッピングしたいという要望がある。これは、DBからSelectしてくるときのトラフィックを削りたいという意味で非常に現実的な要求だ。
DBから取ってきてもいないフィールドを書き戻すことは、バグの原因となる。よって、DBから取ってきたフィールドのみをDBに書き戻したい。そのためには、何らかのマーカーが必要になるのだが、そういうのを用意するのは、OOPらしくない。出来れば、DBから取ってきたフィールド群で構成されている、元のクラスの部分集合型を用意したい。
・部分集合型の問題点
ところが、このときに部分集合型を実行時にCodeDOMなどで動的に生成するとインテリセンスが働かないという欠点がある。
今回は、これを解決するアイデアを思いついた。
・解決方法
User classの部分集合型は、User classの派生クラスにする。この派生クラスはCodeDOMで動的に生成すれば良い。使うときはUser classなので、インテリセンスは働く。ただし、DBから取ってきていないフィールドにアクセスしようとすると、実行時例外になる。(ように、CodeDOMでそういうコードを仕込んでおく)
これって、当たり前のことなのだろうか?それとも新しいアイデアなのだろうか?
私はO/Rマッピング自体に詳しくないので、詳しい人、アドバイスお願い(´ω`)人