おそらく他の何か?すでに nHibernate を使用していますが、遅延初期化されたプロキシ オブジェクトが実際には初期化されないという問題が時々発生します。私は何か他のものを試してみることを考えています。このサイトには、ユーザー アカウント、ユーザーの投稿と写真があり、それらを特定の場所名とタイトル/説明の一致にフィルター処理します。投票、評価、お気に入りとしてのマーキングは言うまでもありません。これらはすべて、さまざまな量のデータベース負荷を引き起こします。
13 に答える
SubSonic は現在、すべての Web フォーム アプリケーションで使用され、大きな成功を収めています。ほんの数分で、データベース全体をゼロから生成して、アプリケーションで使用できるようになります。SubSonic の作成者である Rob Conery は、Web アプリケーションで SubSonic ビットをセットアップするプロセスを詳細に説明した素晴らしい Web キャストと、開始するためのいくつかのクールなデモを公開しています。SubSonic Projectをチェックしてください。
ORMにLLBLGenProを約1年間使用していますが、かなりうまく機能しています。私はSubSonicを使ったことがありませんが、似ていると言われています。ゼロから、データベースからデータアクセス層を作成し、わずか数分で使用できるようになります。少なくとも私にとっては、少し学習曲線がありますが、ヘルプファイルは、遭遇するほとんどすべてのことを理解するのに十分な情報を提供します。このアプリケーションは、インストールされたままの状態で問題なく使用できますが、大幅なカスタマイズもサポートします(多分多すぎますか?)。
私はNHibernateを使用します。Persistence Ignorance は、私にとって主なセールスポイントの 1 つであり、データベースに縛られないことも別の理由です。Entity Framework には、遅延読み込みの欠如だけでなく、深刻な欠陥があります。EF と LINQ2SQL はどちらも新しいテクノロジですが、NHibernate は非常に成熟しており、はるかに多くのアクションが見られています。
NHibernate のもう 1 つの優れた点は、データベースを編集せずにデータベースを切り替える機能です。これをローカルで実行される統合テストに使用し、SQLite に対して実行し、次に CI サーバー上の SQL Server に対して実行します。
別のオプションはCastle ActiveRecordです。NHibernate の上にActive Record 設計パターンを実装し、構成 (たとえば、「isWeb」設定など) とマッピングのほとんどの問題を取り除きます。
かなりアクティブなサイト (1 日あたり 10,000 回の訪問) で ADO.NET Entity Framework を使用しています。それは私たちにとって堅実です。遅延読み込みがないのは面倒ですが、データベースに行くことを考えさせられます。
データベース内の継承モデルが、Linq の非常に限定的な継承サポートで機能する場合は、Linq を使用することをお勧めします。より複雑な継承シナリオが必要な場合は、NHibernate を使い続けて、それに伴うあらゆる問題に対処する必要があります。
Microsoftエコシステムでの私の経験:
私はいくつかのプロジェクトでLinq2Sqlを使用しましたが、azamsharpが言及している「レイヤリング」の問題に遭遇しました。
POCOをロジックまたはUIレイヤーに送り返すことに完全に取り掛かっている場合、それは大いに役立つわけではありませんが、リポジトリパターンの実装は、その厄介なレイヤー化と関心の分離の問題に少し役立ちます。
投票や統計などの複雑なセマンティクスを使用するもの(基本的に、データベースで表されるものとは異なる方法で表示または操作する必要があるドメインオブジェクト)の場合、ADO.NetEntityFrameworkにはいくつかの利点があります。複雑なデータ検索を組み込むことにより、ビジネスロジック/データアクセス層を簡素化できます。
お役に立てば幸いです。
サブソニックはあまり好きじゃない。私には、非常に薄い DAL ツールのように思えます。SubSonic では、私はまだ多くの文字列リテラルを入力していますが、これは私にとって要点を打ち負かしているように思えます。個人的には、LLBLGen の方が好きです。
http://www.llblgen.com/defaultgeneric.aspx
作成者である Frans Bouma は、DAL および ORM テクノロジに関する多くの問題について議論している非常に優れたブログを持っています。
DAL の構成と生成が非常に簡単な SubSonic が気に入っています。この実装は、テーブルごとにクラスを作成するだけなので、本格的な ORM ではありません。ストアド プロシージャを使用できると、結合の結果であるオブジェクトを作成する必要がある場合に対処できます。繰り返しになりますが、SubSonic は機能することを目的としているため、プロジェクトの目標をすばやく達成するのに役立ちます。
つまり、SubSonic を使用して「オブジェクトを構成する」ことはできません。クラス間の関係を記述する構成ファイルはありません。ソリューションをどのように形成するかは、依然としてデータベースによって決定されます。
遅延初期化プロキシで特定の問題を抱えている場合は、それなしで行ってみませんか? または遅延読み込みバッグのみ。遅延読み込みのないフレームワーク用にアプリを書き直す前に、試してみる価値があると思います。
Javaプロジェクトでは休止状態になりますが、間違いなくLINQfor.Netです。LINQが組み込まれているのに、なぜ外部依存関係を追加するのですか?
LINQ to SQL には階層化の問題があることを認めなければなりませんが、LINQ も使用します。私は LINQ to SQL に関する多くの記事を読みましたが、そのすべてが基本的に RAD アプリケーション用に作成されていることを示唆しています。
LINQ は素晴らしい選択です。ここでは Stackoverflow で使用されており、現在のプロジェクトではデータ アクセスに LINQ を使用しています。