BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース NHibernate 3.0 公開

NHibernate 3.0 公開

ブックマーク

原文(投稿日:2010/12/12)へのリンク

NHibernate 3.0 は人気 ORM (Object-Relational Mapping) の,一年ぶりとなるメジャーリリースである。今回のリリースでは,CLR のバージョンが .NET 3.5 に変更されている。これに伴って QueryOver API が実現され,これまでの文字列ベースの ICriteria 式が,強く型付けされた lambda 式に置き換えられる。これはビルトインされた LINQ プロバイダの付加機能である。

今回のバージョンには 互換性のない変更 がいくつかある。nullable 型のサポート改善はそのひとつだ。以前のバージョンでは,"<map> に nullable 型 ( DateTime? など) の <element> を使用する場合,null 値の追加や null 値への更新はできない"。null 値を単に無視していた前バージョンとは異なり,NHibernate 3.0 はデータベースを正しく更新する。また2つの関数のシグネチャが変更され,前バージョンで obsolete と指定されていたメソッドが削除されている。

関連するニュースとして,NDepend の Patrick Smacchia 氏が NHibernate のコード解析報告 を公開している。分析の結果に対する同氏の意見 が,NHibernate のブログに掲載されている。氏の要約によれば,

要約すると,NH は以下の問題については OK です。

  • アセンブリの数が多すぎる問題 (なんと,私の知るプロフェッショナルプロジェクトの 95% が数百ものアセンブリを抱えているのです。開発者のワークステーションとビルドマシンのすべてをとんでもなく遅くする以外,何の役にも立ちません !!)
  • コードカバレッジ不足。NH は 76% という,十分なコードカバレッジレシオを持っています。ただし手作業による記述と生成コードについてであって,テストコードはカウントしていません。参考までに,全体で 63K の LoC (Lines of Code,コード行数) 中,18K LoC が生成されたコードです。
  • API の非互換的変更。開発チームは NH の公開部分に十分な注意を払っていて,以前の NH 2.1.2 バージョンと NH V3.0.0 の比較に関しては明確に警告されています。
  • 不要コード

以下の点には改善の余地があると思います。

  • Code Contract の使用。NH では Code Contracts フレームワークがまったく (MS Code Contract API や Debug.Assert(..) なども) 使用されていません 。
  • 全体のコードカバレッジレシオが 76% もありながら,多くのメソッドあるいはタイプのカバレッジが 90%+ 止まりであり,100% に達していないこと。問題なのは,テストが困難でカバーされずに残った数パーセントのコードの中に,往々にして微妙なバグが残っていることなのです。
  • 全体的なコードアーキテクチャの改善 (NH の公開 API のリファクタが不可能なのが明白である以上,非現実的ですが)。
  • 基本的なコードメトリックスの品質しきい値の重視 (複雑すぎるメソッド,神的クラス,ファットコード,パラメータ数の多いメソッド ... など)。

この記事に星をつける

おすすめ度
スタイル

BT