質問

私は初めての春のアプリケーションを構築しています。私は並行処理で問題の多くに実行している、と私は私がバックエンドを管理しています方法で何かが間違っていると思われます。私が見てきた私は、私のバックエンドのコードと例の間で見ることができる唯一の違いは、マネージャークラスです。

私のコードでは、私がモデルにCRUD /検索/などを行うためにその上に私のモデル(休止状態で管理される)と私のDAOを持っています。私が見てきたサンプルコードでは、彼らが直接DAOを使用することはありません。代わりに、彼らは間接的のDAOを呼び出すマネージャクラスを使用します。私にとって、これは単なる無意味なコードの重複のように思える。

のためにこれらのマネージャクラスは何ですか?私は、「トランザクション」彼らは私のコードをラップすることを読みましたが、なぜ私が?

ことを望みます
役に立ちましたか?

解決

取引がアップデート "トランザクション" にするために使用されます。

例)ユーザが13のレコードにリードがデータベース内で更新されることウェブページをクリックします。エラーがそれをすべてロールバックするだろう、トランザクションのいずれかを確認しますアップデートの0または13を通過します。

マネージャーが行うことは、物事が容易になりとしなければなりません。彼らは魔法のあなたのコードのスレッドセーフをすることはありません。直接DAOを使用すると、それ自体のスレッドの安全性のバグではありません。

しかし、私はあなたのDAOのロジックを制限する提案、およびビジネスレイヤですることができますように多くのロジックとして置きます。 DAOパターンのためのベストプラクティスですか

を参照してください。

あなたは多分、複数のスレッドでうまく機能していない、あなたのコードの小さな例を投稿した場合、我々はいくつかのアイデアを提案することができます...しかし、単独の取引でも管理職でもないが、あなたの問題を解決します。

他のヒント

多くのアプリケーションでは、非自明な要件があり、ビジネス・ロジックは、多くの場合、あなたはDAO1とDAO2にアクセスする場合、あなたがコミットまたはロールバックします(これらのアクセスを通じて取引のいくつかのリソースへのアクセス(例えば、いくつかのDAO)、コーディネートこれらのアクセスのと制御を必要とします作業の不可分単位として変化する)。

クライアントへの粗粒な方法で企業行動を露出させ、専用ののサービスのコンポーネントで、この複雑さをカプセル化し、非表示にすることが一般的です。

これは、あなたが参照している経営者がやっている正確に何をして、彼らは<サービス層を構成します/ A>。

  

はAサービス層は、クライアント層のインターフェースの観点からアプリケーションの境界【コバーンPLOP]と可能な操作のセットを定義します。これは、トランザクションを制御し、その事業の実施に応答を調整する、アプリケーションのビジネスロジックをカプセル化します。

彼らは、より大きなトランザクションの一部だけだかどうかを知る方法はありませんので、

DAOには、自分の取引いけません。

トランザクションが属している。ここで、

サービス層です。あなたは、彼らがしていると言うことが間違っている「無意味なコードの重複。」

scroll top