問題タブ [unit-of-work]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nhibernate - トランザクションなどを気にしない場合、Unit of Work はより効率的ですか?
Web ページに 10 個のデータベース呼び出しがあり、いずれもトランザクションなどを必要としない場合、それらはデータベースからデータを取得 (読み取り) しているだけですが、それでも作業単位クラスを使用する必要がありますか?
データベース呼び出しごとに新しいセッションを作成するのはコストがかかりすぎるためですか?
c# - 作業単位パターンの.netリファレンス実装とは何ですか?
作業単位パターンは、ドメイン上のすべてのアクションを追跡し、複雑なロジックが実行されたときにそれらをすべて一度に適用するためのコンテキストを維持する方法です。
ORM(たとえば、NHibernate)で使用する場合、基になるデータベースへのすべてのアクションに使用される共有ISession(またはLinq 2 SqlのDataContext)を使用して作業単位を実装することをお勧めします。
特にサーバーアプリケーション、主にASP.NetMVCまたはASP.NetWebフォームを扱う場合は、正しく実装するのが難しい場合があります。
私はRhino.Commons(NHibernateに向けてギアリングされています)での実装に手を出しましたが、他のいくつかのことを知っていますが、それらの長所と短所をよく理解していません。
最も一般的に使用されているものと、それらをASP.Net MVC(またはWebFormsですが、私は主にMVCに興味があります)にシームレスに統合する方法は何ですか?
linq-to-sql - 作業単位の設計パターン
LINQ to SQL を使用した Unit of Work パターンの実用的な例について、良いリンクを持っている人はいますか?
c# - NHibernate セッションの上で Unit of Work パターンを使用するのはなぜですか?
NHibernate によって既に提供されているものの上にいつ UoW 実装を作成しますか? 実際の例はありますか?
repository - 作業単位とL2SDataContext
あなたのためのクイックQはそこに専門家をパターン化します。
まだ決定していないので、実際のデータアクセス技術から切り離されたリポジトリパターンが必要であり、柔軟性が必要です。つまり、これはL2S、L2E、NHibernate、Lightspeedなどです。
しかし、私はこのUnitOfWorkのことについて混乱しています。
L2Sの世界では、これがDataContextのようです。
しかし、L2S以外の世界についてはどうでしょうか。たとえば、手書きのSQLを使用していたと想像してください。
私の質問は、誰が何をするのかということです。私のRepo.Save()メソッドでは、これでUnitOfWork.Commitを呼び出す必要があります。これにより、必要なINSERT / UPDATE SQLが生成されますか?
明確な答えを期待していませんが、私が正しい方向に進んでいることを確認するために、いくつかの議論が良いでしょう!
ありがとう
asp.net - Unity のコール コンテキストごとのシングルトン (Web リクエスト)
数日前、ASP.Net のスレッド化で問題が発生しました。Web リクエストごとにシングルトン オブジェクトが必要でした。私は実際に私の仕事の単位にこれが必要です。ID マップがリクエスト全体で有効になるように、Web リクエストごとに作業単位をインスタンス化したかったのです。このようにして、IoC を使用して独自の IUnitOfWork をリポジトリ クラスに透過的に注入し、同じインスタンスを使用してエンティティをクエリしてから更新することができます。
Unityを使っているのでPerThreadLifeTimeManagerを間違えて使ってしまいました。ASP.Net スレッド モデルは、私が達成したいことをサポートしていないことにすぐに気付きました。基本的に、スレッドプールを使用してスレッドをリサイクルします。つまり、スレッドごとに 1 つの UnitOfWork を取得します!! ただし、私が望んでいたのは、Web リクエストごとに 1 つの作業単位でした。
少しグーグルで調べたところ、この素晴らしい投稿がありました。それがまさに私が望んでいたことです。達成するのが非常に簡単だった団結の部分を除いて.
これは、統一のための PerCallContextLifeTimeManager の私の実装です。
そしてもちろん、これを使用して、次のようなコードで作業単位を登録します。
誰かの時間を少し節約できることを願っています。
repository-pattern - UnitOfWork パターンとアトミック操作
Repository と UnitOfWork のパターンを正しく実装したかどうか 100% 確信があるわけではありませんが、これがどのように機能するかはわかりません。
たとえば、Apple と Orange という 2 つのオブジェクトがあります。
Apple は、次のように OrangeID を介して Orange に参加しています。
新しい Apple と新しい Orange を作成し、ID リンクを適切に設定したいと考えています。しかし、私には問題があります。Orange をデータベースに保存するまで、OrangeID はわかりません。
したがって、これは次のことを意味します。
上記の外にあるトランザクションがない限り、これはアトミック操作ではありません。しかし、それが UnitOfWork が処理するものだと思いましたか? または、データベースへの書き込み時に UnitOfWork.Commit() が適切な値を割り当てる必要がありますか?
ヘルプ/ヒントをいただければ幸いです。ダンカンに感謝します
dependency-injection - IUnitOfWorkを見つけるためのデザインパターンは何ですか?
永続性を無視したリポジトリパターンを実装しました。IUnitOfWork
リポジトリの実装は、エンティティオブジェクトおよびITable<T>
インターフェイスとのみ対話します。目的は、IUnitOfWork
が再利用されないが、単一のトランザクションを表すことです。これまでのところ、メモリ内とLinq-to-SqlバージョンのIUnitOfWork
およびを実装しましたITable<T>
。
私の問題はIUnitOfWork
、リポジトリへの注入が原因IUnitOfWork
で、リポジトリが使用されている場所で新しいインスタンスを作成する方法を知る必要が生じることです。これはプラグイン可能であるはずの主要な部分なので、私が何か間違ったことをしたように感じます。一般的な使用パターンは次のようなものです。
これで、アプリ内のすべてのリポジトリ使用量が正しい作業単位(たとえば、メモリ内、L2Sなど)を取得できるようにするために、他のパターンが必要なようです。
これに最も適したパターンは何ですか?私はこのトピックに関するファウラーの議論を見てきましたが、彼の例はどれもぴったりではないようです。私が持っている抽象化の量は私が望む以上のものであるとすでに感じているので、さらに別の間接参照を構築することは過度に思えます。
現時点では、正しいを生成するように構成できる、ある種のアプリ全体のプロバイダーに傾倒していますIUnitOfWork
。私はオフベースですか、それともこれは本当に実装にとらわれないために必要なことですか?
nhibernate - NHibernateおよびRhinoリポジトリでの奇妙な保存動作
NHibernateで奇妙な動作を経験しています。リポジトリから学習者のリストを取得し、必要に応じて更新しています。奇妙なことに、最初の学習者を保存すると、すべての学習者に加えられた変更がデータベースにコミットされます。
なぜ何かアイデアはありますか?キャッシュを有効にしていません。saveメソッドの呼び出しがコメントアウトされていても変更が保持されるため、トランザクションと関係があることを私は知っています。
これは私のマッピングです: