2009-08-29 29 views
35

私は、彼らが選択するかどうかについて意見を聞くことに興味があります。NHibernateまたはFluent NHibernate?

流暢な使用にはどのような短所がありますか? (バージョン依存は、多分?) の長所、短所、経験など

+1

NHibernateではマッピングのためにhbm.xmlファイルが使用されていますが、Fluent NHibernateはC#コードでそれを置き換えます。問題を見つけて維持するのはとても簡単です。 –

+3

私は3年以上前にこれを聞いて、今月は閉鎖されますか?ハァッ。 – UpTheCreek

答えて

52

流暢NHibernateのは、二つの間の選択をNHibernateの上に座っているので、そのない、本当に。あなたがNHibernateを使うつもりであれば、あなたの膨大な労力を節約するために、NHibernateを使用してFluent NHを使用するように選択してください。

流暢NHibernateは素晴らしいですが、私はそれなしでNHibernateを使用しません。煩雑なxmlファイルを維持したり、構文/ DTDを覚えたりせずに、エンティティをコンパイルして(コンパイル時間と自動テストのサポートを提供する)、すばやくマップすることができます。

また、デフォルトおよび/または独自のカスタム規則に基づいてエンティティを自動的にマッピングすることもできます。

ちょうどそれを使用してください!

+0

はい、申し訳ありませんが私の質問を少し違った言い方にしてください;)答えてくれてありがとう。 – UpTheCreek

+0

はい私はもっと同意できませんでした。 RhinoとGeoライブラリと一緒にFluentを使用しました。時折、バージョンの不一致が発生します。 – Perhentian

+0

私はそれをもう一度。私はFluent NHibernateを使い始めました。私は振り返っていません。あなたのクラスをどのようにマップするのが簡単かは驚きです。 – Siewers

9

NHibernateと一緒にFluent NHibernateを使用する利点は、ランタイムエラーの代わりにマッピングを混乱させると、コンパイル時エラーが発生することです。 XMLマッピングファイルを手動で変更するのではなく、プロパティの名前を変更するときにマッピングが最新の状態に保たれるため、コードをリファクタリングするときの方がはるかに優れています。

Fluent NHibernateの最大の欠点は、開発のかなり初期段階にあり、フレームワークの開発が進むにつれて変更を破る大きなリスクがあることです。

+1

私の経験では、FluentNHibernateを使って遭遇する悪いマッピングに起因するエラーの大部分は、NHibernateが最初にアプリケーションで使用されたときに実行時に発生します。単純なリファクタリング/タイプのミスマッチ/誤字/などコンパイル時にエラーが発生します。 –

4

個人的に私はマッピングファイルに慣れているので、流暢なnhibernateに本当に慣れていません。視覚スタジオを使用してマッピングファイルを作成するのは簡単ですし、マッピングファイルでインテリセンスを与えるxmlファイルのスキーマを設定できます。私はコンパイル時の構文チェックをすることが流暢なnhibernateを使う利点であることに同意しますが、私は既にXMLマッピングに精通しているときに流暢なAPIを学ぶことを正当に思っています。おそらく、私はちょうど私の欲求を乗り越えて、それをすでに学ぶべきです:...-

12

私は間違いなく流暢なnhibernateと言うでしょう。ちょうどそれがあなたが望むほど滑らかな乗り物であるとは限りません。 FNHの新しいバージョンにアップグレードするとき、私は「逆」依存の問題を持っていたバージョン依存

  1. について

    1. はNHの新しいバージョンにアップグレードするために私に必要な(2.0〜2.1と思います) 。これは私にとって大きな問題ではありませんでした。

    2. 私は最近(今朝)、NH 2.1.1をFNH 1.0 RTM(これは2.1.0と一緒に配布されています)に落としました。まだドラマはありません。
  2. 編集:この記事を書いているのでFNHが もう私はこれが本当の問題だとは思わない点まで、実質的にマッピングをサポートして成熟しています - いくつかのマッピングが流暢NHibernateのではまだできません。しかし、これはFNHを避ける理由ではありません。ハイブリッドなfluent-xmlマッピングは、流暢なマッピングができない場合に伝統的なXMLにフォールバックすることを可能にします(これはクラスごとの粒度でしかありません)。マッピングの例:

    1. はまだフィールドをマップすることはできません - http://groups.google.com/group/fluent-nhibernate/browse_thread/thread/a7787927dafd23a/84ce2616946a18d7
    2. 辞書http://groups.google.com/group/fluent-nhibernate/browse_thread/thread/d38b6c72250cd2fbのいくつかの時間をマッピングすることはできません - 実際に私は、この機能が存在するが、まだメインラインではありません集まる何から。
  3. 化合物の複雑さ因子。その音から、あなたは同時にFNHとNHの両方を学ぶでしょう。かなりシンプルなアプリケーションの大部分については、これはうまくいきます.FNHはしばしばとてもよく、hbm.xmlマッピングについてはほとんど知る必要がありません。しかし、あなたが合理的に複雑なことをやりたいのであれば、初めての回ではほとんど動かず、PEBKAC、流暢なNH問題かどうか疑問に思うままになります。私が望むよりもしばしば、伝統的なXMLマッピングを書くことになりました(もちろん、あなたはこれをやっていますが、流暢に最初に手を加えることよりも多くの努力を費やさない方がよいでしょう)。

+0

あなたの考えをお寄せいただきありがとうございます - 私はポイント3であなたのことを聞きます。結局、私はFNHと一緒に行きましたが、小さなプロジェクトもやっています - これは本当に良いアイデアでした。 NHについては、実際に何が起こっているかを実際に知っているより快適に感じる。 (ちなみに、私はPEBKACを検索しなければならなかったが、はい、これは私の問題の大部分がどこに由来するかである) – UpTheCreek

+3

最新のバージョンではフィールドがサポートされています。 –

+0

あなたは流暢なマッピングからいつでもhbm.xmlを生成し、手で編集することができます。すべて手動で書く必要はありません – Firo

2

Fluent N-HibernateはNHibernate上の素晴らしいラッパーです。 FluentでのマッピングをXMLマッピングよりもはるかに優れたものにする。

エンティティデベロッパーを使用してエンティティとデータベーススキーマを作成する場合に最適です。