問題タブ [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.
wpf - Unit of Work デザイン パターンの使用 / MVVM WPF での NHibernate セッション
私は分析の麻痺で立ち往生していると思います。助けてください!
私は現在、プロジェクトを持っています
- SQLite で NHibernate を使用
- リポジトリと作業単位パターンを実装: http://www.nhforge.org/wikis/patternsandpractices/nhibernate-and-the-unit-of-work-pattern.aspx
- WPF アプリでの MVVM 戦略
私の場合の Unit of Work 実装は、一度に 1 つの NHibernate セッションをサポートします。当時、これは理にかなっていると思いました。ViewModel から NHibernate セッションの内部動作を隠します。
現在、Oren Eini (Ayende) によると: http://msdn.microsoft.com/en-us/magazine/ee819139.aspx
彼は、プレゼンター/ビューモデルに関連付けられたビューが破棄されるときに、NHibernate セッションを作成/破棄する必要があることを聴衆に納得させます。彼は、Windows アプリごとに 1 つのセッションを必要としない理由や、トランザクションごとにセッションを作成/破棄したくない理由を示しています。残念ながら、私の UI ではアプリに 10 個以上のビュー/ビューモデルが存在する可能性があるため、これは問題を引き起こします。彼は MVP 戦略を使用してプレゼンテーションを行っていますが、彼のアドバイスは MVVM に変換されますか?
これは、作業単位を廃止し、viewmodel に NHibernate セッションを直接作成させる必要があるということですか? WPF アプリは一度に 1 つの作業セッションのみを持つべきですか? それが本当なら、いつNHibernateセッションを作成/破棄する必要がありますか?
そして、NHibernate Stateless セッションがこれらすべてにどのように適合するかはまだ考えていません! 私の脳は爆発するつもりです。助けてください!
アップデート:
Rhino Tools で Ayende の Unit of Work 実装を見つけました。彼の実装と私が行った実装には大きな違いがあることがわかりました。彼は間違いなく複数のセッションをサポートしました。さらに調査した結果、次のことを行うのが最善だと思います。
- Unit of Work の実装を破棄する
- viewmodel から直接 NHibernate の ISession および IStatelessSession オブジェクトを使用することをやめます。私の意見では、それは理想的ではありませんが、私はすでに Unit of Work に多くの時間を費やしており、それが現在の形になっているわけではありません。ある時点で KISS と YAGNI を適用する必要があります。Ayende の記事や他のいくつかの記事で、それらを直接使用しても問題ないと指摘されているという事実に、少なくとも慰めを得ることができます。
- 本当に ISession を公開したくない場合は、いつでも Castle.ActiveRecord を使用できますが、それは必要ではないと思います。
- セッション ファクトリのコードを再利用できるので、Unit of Work の実装は無駄ではありません。
- StatelessSession と Session の両方を挿入できるようにリポジトリをリファクタリングし、利用可能な場合はステートレスを使用します。それ以外の場合は通常のセッションを使用します。
結局のところ、ビューモデルごとに1つのセッション/ステートレスセッションを開く戦略を適用し、ビューが破棄されたら、ビューモデルをフラッシュ/セッション/ステートレスセッションを破棄します。
計画のようだ?
unit-of-work - 作業単位のパターンと持続性
Unit of Work パターンについて読んでいますが、UoW が実際にデータを保持する方法について混乱しています。
変更をコミットすると、UoW は、追加、更新、および削除されたオブジェクトのリストを繰り返し処理し、特定のタイプのオブジェクトの追加、更新、削除を担当するクラスを何らかの方法で見つける必要があります。
この手法を示す例は見つかりませんでした。
これに関するアドバイスは大歓迎です。
モッシュ
entity-framework - Entity Framework 4 の「Unit of Work」パターンは、一般的なリポジトリに適していますか?
私が取り組んでいる新しい ASP.NET MVC プロジェクト用の Entity Framework 4 汎用リポジトリの作成を検討しています。私はさまざまなチュートリアルを見てきましたが、それらはすべて Unit of Work パターンを使用しているようです...
私が読んだことから、EF は既に ObjectContext 内でこれを使用しており、これを拡張して独自の作業単位を作成するだけです。
なぜこれを行う努力をするのでしょうか?これは、一般的なリポジトリを操作するための推奨される方法ですか?
どうもありがとう、コーハン。
asp.net-mvc - NHibernateUnitOfWork + ASP.Net MVC
私はDDDを初めて使用するので、初心者です。だから、それは非常に簡単だとしましょう:D私はasp.net mvc 2、ddd、nhibernateを使用してアプリケーションを開発しました。クラスライブラリにドメインモデルがあり、別のクラスライブラリにリポジトリがあり、asp.netmvc2アプリケーションがあります。私のリポジトリ基本クラスには、注入する構造と依存関係(global.asaxで開始された独自のISessionFactoryオブジェクト)があります。コードは次のとおりです。
そして、私がこのような特別なリポジトリを持った後:
このコードにはトランザクションの制御がなく、正常に機能していますが、asp.net mvcのコントローラーでこのリポジトリを制御するために、次のような単純なものを作成したいと思います。
NHibernateUnitOfWorkについて聞いたことがありますが、わかりません:(、リポジトリで動作するようにNHibernateUnitOfWorkを構成するにはどうすればよいですか?単純なリポジトリを変更する必要がありますか?推測は大歓迎です!
だから、誰かがここまで読んでくれたらありがとう!私を助けることができれば、私は感謝します!
PS:私の英語でごめんなさい!
さようなら=D
c# - NHibernateおよびその他のORMにおける「UnitofWork」の概念の意味は何ですか?
NHibernateおよびその他のORMにおける「UnitofWork」の概念の意味は何ですか?
domain-driven-design - 複数のデータ ストアを扱う場合、リポジトリ パターンと作業単位をどのように実装すればよいですか?
Active Directory と SQL データベースの両方に永続的にアクセスする必要がある DDD ベースのシステムを構築しているという独特の状況があります。最初は、これは問題ではありませんでした。これは、次のような作業単位を持つ設計がセットアップされたためです。
リポジトリは次のようになります。
このセットアップでは、ロードとセーブで両方のデータ ストア間のマッピングが処理されます。これは、自分で作成したためです。作業単位はトランザクションを処理し、リポジトリが永続化のために使用する Linq To SQL データ コンテキストを含みます。Active Directory の部分は、インフラストラクチャに実装されたドメイン サービスによって処理され、各 Save() メソッドのリポジトリによって使用されました。Save() は、すべてのデータベース操作を行うためにデータ コンテキストと対話する役割を果たしました。
現在、これをエンティティ フレームワークに適応させ、POCO を活用しようとしています。理想的には、ドメイン オブジェクトはオブジェクト コンテキストによって追跡されているため、Save() メソッドは必要ありません。作業単位に Save() メソッドを追加して、オブジェクト コンテキストに変更を保存させるだけで済みます。新しいオブジェクトをコンテキストに登録します。新しい提案されたデザインは、次のようになります。
これにより、エンティティ フレームワークに関するデータ アクセスの問題は解決されますが、Active Directory 統合に関する問題は解決されません。以前はリポジトリの Save() メソッドにありましたが、現在はホームがありません。作業単位は、エンティティ フレームワークのデータ コンテキスト以外は何も認識しません。このロジックはどこに行くべきですか?この設計は、エンティティ フレームワークを使用するデータ ストアが 1 つしかない場合にのみ機能すると主張します。この問題に最善のアプローチをする方法はありますか? このロジックをどこに置くべきですか?
java - 作業単位パターンの検証戦略
作業単位パターン(JPAを使用) を使用すると、リポジトリからエンティティを取得して変更し、作業単位での変更を暗黙的にデータベースに保存します。
ここで、作業単位パターンで検証を実行する方法を知りたいです。ドメイン オブジェクトに (ユーザー入力から) 変更を適用し、その後検証すると、検証が失敗した場合でも、そのオブジェクトの値が変更されます。不正な状態のオブジェクトをデータベースに書き込まないようにする方法は何ですか? 作業単位をロールバックしますか?
OOP の目標の 1 つは、オブジェクトが自身の状態を監視して、不正な値を受け入れないようにすることです。このアプローチでは、例外をスローする必要がありました。これは、上記の Bean 検証 (およびスプリング検証) アプローチとは逆です。しかし、おそらくそれはよりシンプルで優れています。
(ドメイン駆動設計で) どの検証戦略を使用しますか?
php - PHPで分離されたインターフェースを実装することは可能ですか?
私は最近、 Unit of WorkクラスとData Mapperクラスの間の依存関係の解決に関する質問をしました。
PoEAA では、Martin Fowler が、これらの依存関係を管理するために分離インターフェイスを使用することを提案しています。私の質問は簡単です。実際にこのパターンを PHP で実装することは可能ですか、それとも Java インターフェイスに固有のものですか? 高低を検索しましたが、PoEAA 以外の場所でこのパターンへの参照を見つけるのは困難です。
nhibernate - Nhibernate セッションから変更された (ダーティ) エンティティのリストを取得するには?
変更されたすべてのエンティティに対してフラッシュする前に、いくつかのビジネス ロジックを記述する必要があります。私が試した解決策の 1 つは、IPreUpdateEventListener です。ただし、このイベント リスナーには、キー値に非正規化されたオブジェクトが既に含まれています。非正規化の前、さらにはフラッシュの前に何かが必要です。
したがって、質問は、変更された (diry) エンティティのリストを取得する方法です。
nhibernate - NHibernateISessionと私の作業単位でのトランザクションの自動フラッシュ/コミット
IRepository実装に提供されるIDbContextオブジェクトを作成しました。DbContextは、ビジネスロジックがトランザクションを作成、コミット、ロールバックし、必要に応じてコミットする方法を提供します。また、NHibernate ISessionを転送するため、IRepositoryのNHibernate実装がアクセスできます。
このセットアップをWebアプリケーションで使用しています。このセットアップでは、リクエストごとに1つのDbContextが作成され、すべてのリポジトリで共有されます。リクエストの最後に、ISessionを破棄します。
標準的なNHibernateプラクティスの経験または知識を通じて、セッションを破棄してクローズしようとしているときに、DbContextをフラッシュして、未処理のトランザクション(エラーがない場合)を自動的にコミットすることは許容されますか?