4

Conery のストアフロントを確認すると、なぜ彼が Linqs の自動生成クラス (つまり Order クラス) を使用し、部分クラスではない別の Order クラスを定義しているのか理解できません。リポジトリ パターンを使用する場合、手動でクラスを作成し、Datacontext を完全に無視する必要があるのはいつですか?

4

3 に答える 3

3

中間クラスを使用してフロントエンドをlinqクラスから切り離さないと、データコンテキストでガベージコレクションを制御できなくなります。通常、インスタンスのデータコンテキストタイプでは、使用が終了したらすぐにそれらを削除する必要があります。linqtosqlコンテキストでこれを行う方法は次のとおりです。

using (MyDataContext data = new MyDataContext())
{
    SomeThing thing = data.Things(t => t.ID == 1);
    return thing;
}
... the MyDataContext instance is gone

「using」ブロックを使用すると、MYDataContextのインスタンスを最後の「}」で破棄します。ただし、これを行うと、データコンテキストインスタンスがなくなったため、エラーが発生し、「thing」を使用しようとします。データコンテキストを破棄しない場合、最終的にガベージコレクションが行われるまでデータコンテキストはそのままになります。

呼び出し元のアプリからlinqからsqlへのコードを分離するために中間クラスを導入した場合でも、データコンテキストインスタンスを削除して同じデータを返すことができます(別のオブジェクトにあるだけです)。

using (MyDataContext data = new MyDataContext())
{
    SomeThing thing = data.Things(t => t.ID == 1);
    SometThingElse otherThing = ConvertSomethingToSomethingElse(thing);
    return otherThing;
}
... the MyDataContext instance is gone

お役に立てば幸いです。

于 2009-03-08T07:35:51.653 に答える
3

ロブは彼のショーの 1 つでこの質問に答えました。

彼はPOCOクラスを使用して、すべてのデータアクセスクラスから認識しています。たとえば、彼が LINQ-to-SQL を NHibernate に変更する場合、フィルターで「マッピング」を変更するだけで済み、ビジネス ロジックを変更する必要はありません。

于 2009-01-10T06:54:32.793 に答える
2

彼は最近のビデオの 1 つで、LINQ to SQL のマッピング方法が気に入らないと言っていました。私はそれが完全にやり過ぎだと思いますが、同意します。

リポジトリ パターン自体に固執している限り、主要なデザイン パターンを壊すことはないと思います。クラスを 2 セットにするのは選択の問題だと思いますが、悪いものではありますが、それでも選択は可能です。

于 2009-01-10T06:54:07.287 に答える