掲示板お問い合わせランダムジャンプ



この広告は30日以上更新がないブログに表示されております。 新しい記事を書くことで広告を消すことができます。

Top Index

2011年12月21日
近況とかORMとか
またORM作ってます。
メジャーバージョンは4。
4回も作ってます…
うち1回はフルスクラップビルド。
で、今回は過去の経験も含め以下のような要件でやってます。

・シンプル
これがコンセプトです。

・ORMのみに注力する
ORM以外の機能は極力排除します。
これらの機能は拡張で対応してください。
たとえば、SQLのロギング機能は標準ではありませんが、
簡単にSQLコマンドをフックできるようにします。
log4netなどお好きなログツールを使用してください。

・コネクションを隠ぺいしない
ナンでもカンでもでもORMでやるのは愚の骨頂。
一括更新なんかはストアドやクエリを使ったほうがいいし、
レポート系はクエリ書いたほうがいい。
というわけで、コネクションを隠ぺいしません。
好きに使ってください。

・1コネクション中に複数のマッピング処理が実行可能
前はコネクションを隠ぺいしてたせいで、
マッピングする度にコネクションも閉じていましたが、
考えを改めましたので、コネクション開閉回数を抑えることができます。

・遅延ロードはサポートしない
いわゆる、参照した時にDBアクセスが発生するというやつはやりません。
あったら便利でしょうが、明示しない DB I/O が発生するのがイヤ。
事前に読み込んでおくか、ストアド化してください。

・ソートはサポートしない
ページングとか考えたらいりそうですが、今のところORMではやりません。
読み込んだリストを手動でソートするか、クエリでやってください。

・複雑な選択クエリもサポートしない
コネクションを隠していませんので、クエリでやってください。

・拡張性を残す
デリゲートを使って、関数で拡張したり、差し替えたりできるよにします。

・設定より制約
制約どおりであれば、
エンティティクラスを定義する際、属性やインターフェイス、基底クラスなどを
煩わしいことは一切なし。
なお、制約自体を独自関数に差し替えることは可能。

・ある程度の過剰読み込みを許容する
これはORM自体がそういうもんなんですが、あまりに過剰すぎてもいけない。
過剰に読み込まなくしたいが、その設定が複雑なのも簡便。
ということで、カスケードする階層を指定できるようにしています。
※0なら、自分自身。リレーションなし。
※1なら、自分自身と、その直近の親まで。という感じ。

・主キー検索条件を簡潔に書けるようにする
主キー検索する場合、普通は引数にIDを使いますが、
プロパティ名のリファクタリングなどが起きた時まぁまぁ面倒。
主キー検索条件はインスタンスそのものを使用します。
※文章で書いてもいまいちわからないでしょうが、まぁそういうことです。

んで、いまんところ読み書き、ダーティチェックまでは一応完成しました。
バージョン1のころと比べるとものすごいコード量が減ってます。
.NETのバージョンもあがったおかげで、プロパティの宣言も短く済みますしね。

あとはダーティチェックをEFの自己追跡っぽいコードに変えようか悩んでる最中。
しかし、EFの自己追跡ダーティチェックはPOCOといえるんだろうか・・・
パッと見POCOっぽいが、パーシャルクラスがえらいことになってるやん・・・
Silverlightでも使えるのはいいけど、ASP.NETに絞ったらどうなんだろとは思う。

もう少し調査してみる。

そして気が向いたら公開します。
[ 投稿者:mk3008 at 23:24 | 雑記 | コメント(0) | トラックバック(0) ]