0

nhibernate 楽観的ロック機能によって「保護」されているオブジェクト ツリーにオブジェクトがあります。

トランザクションのコミットで staleobjectexception が発生した場合は、手動でツリーをトラバースする必要がありますが、トランザクションがいくつかの独立したオブジェクトをさらにコミットすると、これらは失われます...:(

どちらも、アーキテクチャのエラーが原因であると私に信じさせます

しかし、正しいアプローチは何ですか?

オブジェクト ツリーごとに単一のトランザクション、staleobjectexception で競合処理を構築しない...?

今の自分のやり方に嫌悪感を覚える...

4

1 に答える 1

0

私の見解、私の経験を追加したいと思います。

(したがって、質問に対する答えである必要はありません)。私はあなた/私たちが私たち自身のコード、私たち自身のデザイン/アーキテクチャに疑問を抱くのが好きです.これは良い兆候です. 悪いのは、それを省略すると...

エラーはありますか?

従うべきルールのセットは次のとおりです: Best Coding Practices .

これらの1つは(抜粋)です:

コードをシンプルに保つ

プログラマーが書くコードは単純でなければなりません。コードは将来別のプログラマーによって変更される可能性があるため、単純なことを達成するための複雑なロジックは最小限に抑える必要があります。あるプログラマーが実装したロジックは、別のプログラマーには完全に理解できない場合があります。そのため、常にコードをできるだけシンプルに保ちます

言い換えれば、それが優れたアーキテクチャであると思われない場合、それはそうではありません。あなたが気に入らなければ、他の人も気に入らないでしょう。

バージョン管理、方法(提案)

以下に、バージョン管理に適用するいくつかの一般的なアプローチについて説明します。

  • バージョニングは、ビジネス オブジェクト (ドメイン内のすべてのオブジェクトの 20% を超えてはなりません) にのみ役立ちます。その他 (通貨、国などのコードリスト) はバージョン管理されていません。
  • 各オブジェクトには、そのツリーの独自の管理 (CRUD 操作) があります。その場合、このルートオブジェクトのみがバージョン管理されます。たとえば、Address が Person でのみ存在できる場合、両方のオブジェクトが 1 回のウォークスルー (Person の作成または修正) 中に保存されます。個人だけがバージョンを持っています

以上です。本当に、これ以上複雑なことはありません。しかし、これがあなたの質問に答えないかどうかは理解しています... この議論に私の意見を追加したかっただけです.

于 2013-05-25T17:59:41.487 に答える