2009-03-17 9 views
1

私は長年にわたってejb、oledb、およびADOコードをたくさん書いています。 O/Rマッパーでの私の経験は、最高でもスピードのためのブタであり、最悪の場合、悪夢に満ちた悪夢です。NHibernate O/R Question

NHibernateまたはSpring .NETが問題のある理由とその理由は何ですか?

答えて

1

行動や他のコードから分離されたモデルでデータを明確に定義できるため、「トラブル」の価値があります。カスタムDALを書く必要はありません。彼らは懸念の分離に役立ちます。

1

それはあなたの焦点によると思います。

私の店では、(実際のJava/OOプロペラの頭部を)愛する人もいるし、SQLスキルが高い人もいます。

私は第2グループにいますが、私は開発者のDBAです。

彼らは本質的に邪悪ではありませんが、宗教的な手荷物なしで正しく使用された場合、単に有用なツールです。

1

SQL Serverとの緊密な結合や、スキーマとの結合が気にならない場合は、LINQ to SQLを調べることを検討してください。それはフレームワークの一部であり、かなり簡単で、驚くほど簡単にプログラムすることができます。あなたは、VS 2008に付属のデザイナーを使用して数分間で起動して実行することができます。

つまり、LINQ to SQLは完全ではありません。 NHibernateは確かに多くの点でより堅牢であり、また、Entity Frameworkの移行が進行中です。

しかし、LINQ to SQLは高速化のための熊ではありません。また、デザイナーはバグフリーではありませんが、かなり堅牢で基本的なファンダメンタルズはではありませんが、はバグではないことを経験から教えてください。

LINQ to SQLは、実際には非常に強力で成熟したORMです。

LINQ to SQLの機能の実例が必要な場合は、このWebサイトをご覧ください。バックエンドのためにLINQ to SQLを使用していますが、それはまったく遅くないとは思いません。

3

私はSpring.Netデータモジュールを使用していないので、私はコメントしません。 IOCのためにSpring.Netを使用しました。一般的に、私はあなたがそれをより良くすることができると思います。

NHibernateは非常に良好です。それはまっすぐADO.Netよりも遅くなりますが、一般的に、あなたが心配するのに十分ではありません。キーは、NHibernateがデータベースコードを素早く稼働させることができるため、実際のアプリケーションコードを心配する必要がないことです。アプリケーションはデータベース以上のものです。

その後、長い時間がかかるクエリを見つけてアプリケーションのパフォーマンスに影響を与える場合は、従来の方法を使用してTHATメソッドを書き換えます。

は、同様などのマットはオームズは、彼らがあなたのアプリケーションの設計に許可関心事の分離のために価値があるで述べたように

+0

"アプリケーションはデータベース以上です。"良い引用 - これは多くのDBAタイプの人々がIMOを逃している点です。 – bernhardrusch

+0

多分...しかし、それを悪用したり無視したりする理由はありません。 – gbn

+1

良い関係設計を知らないという言い訳はありません。どのようにインデックスを作成するべきか考えてください。その後、私は気にしない。データベースはツールです。 –

2

Entity Frameworkの、亜音速、LLBLGen、他の選択肢があります。もちろん、大きなトレードオフは生のパフォーマンスです。私が推測している考え方は、ハードウェアリソースを常に拡大することができますが、密接に連携したコードを簡単に拡張したり拡張することはできません。

.netのスペースを調べる場合は、Lightspeedを考慮してください。これは商用ORMですが、NHibernateよりもはるかに高速で、一般的には直感的に扱うことができます。

0

NHibernateは間違いなく努力する価値があります。他の人が言っているように、それはADO.Netなどを直接使用するよりも遅いですが、生産性の向上はそれだけの価値があります。 NHibernateは - 彼らは実際に

  • キャッシュを要求されたときにのみロードDBからの子オブジェクト/コレクション -

    1. レイジーローディング:パフォーマンスの面では、あなたは物事をスピードアップするためにNHibernateの中で行うことができますかなりの数の調整があります1次キャッシュと2次キャッシュがあります。第1レベルのキャッシュはデフォルトで使用され、NHibernateは同じセッション内で同じクエリを複数回実行しないことを意味します。 2番目のレベルのキャッシュは、どのオペレーションが(第三者キャッシングエンジンによって)キャッシュ可能であるかをNHibernateが処理するように選択することができます。例えば。何度も(すべてのセッションで)オブジェクトをロードすると、オブジェクトがほとんど変更されず、キャッシュ可能になり、処理速度が向上します。