[解決済み] Transactionalはどこに置くべきか Service Layer or DAO
質問
まず、私が質問していることが、以前に質問され回答されている可能性がありますが、私は検索結果を得ることができませんでした。私たちはサービス層にトランザクションアノテーションを定義しています典型的な春のHibernateのくずは、通常
コントローラ->マネージャ->ダオ->オーム.
私は今、クライアントサイトに基づいてドメインモデルを選択する必要がある状況にあります。 例えば、クライアントAが私のドメインモデルを使用している場合は良いのですが、他のクライアントサイトは私にウェブサービスを提供し、私たちのドメインモデルを使用しないとします。
どのレイヤーを置き換えるべきでしょうか。つまり、2つの別々に書かれたDAOレイヤーを、シナリオに基づいてプラグインするのです。
私は今、私たちがタイトなカップリング(そのようなものがある場合、またはルーズなカップリングを持っていないと言う)を行っていることに気づきました。
@Transactional
を入れたとき、密結合をしていたことに気づきました。これだけの頭脳があるのだから、間違ってはいないのだろう。
だから質問は、"どこで&quotをする必要があります。
@Transactional
は、サービス層かDAOか?
11年経ってもまだ関連性があります。プロジェクトを振り返ってみると、当時のドメイン モデルに対する私の理解は明らかに間違っていました。私は ORM レイヤーをドメイン モデルとみなしており、ORM と分離されたエンティティで動作し、データ マッピングも DTO もないことを望んでいました。当時は、それがトレンドでした。最近では、ドメインモデルはORMではなく、適切なドメインモデルを持ち、ORMやWebservicesをデータソースとして使用することで、この問題を解決しています。多くの人が指摘したように、JPA(ORM)をドメインモデルと見なさず、適切なドメインモデルを持って、サービスが適切な場所です。
どのように解決するのですか?
理想的には、サービス層(
マネージャー
) はビジネスロジックを表し、それゆえに
@Transactional
.
サービス層はDBオペレーションを実行するために、異なるDAOを呼び出すことができます。サービスメソッドに3つのDAOオペレーションがある状況を想定してみましょう。1番目のDAOオペレーションが失敗した場合、他の2つのオペレーションはまだ渡される可能性があり、一貫性のないDBの状態で終わるでしょう。サービスレイヤーにアノテートすることで、このような事態を回避することができます。
関連
-
[解決済み] Transactionalアノテーションはどこに属しますか?
-
[解決済み] クラスを@Componentでアノテートした場合、Spring BeanとSingletonということになるのでしょうか?
-
[解決済み] Spring Dataです。"delete by "はサポートされていますか?
-
[解決済み] Spring BootとMongoDBへの接続設定方法
-
[解決済み] Intellij IDEAがSpring Bootのプロパティを解決できないと訴えるが、問題なく動作している
-
[解決済み] Map または Properties オブジェクトとしてすべての環境プロパティにアクセスする
-
[解決済み] URI [/WEB-INF/pages/apiForm.jsp] を持つ HTTP リクエストのマッピングが見つかりません [重複]。
-
[解決済み] Spring MVC @RestControllerとリダイレクト
-
[解決済み] RestController と @RepositoryRestResource の使い分けについて
-
[解決済み] Spring MVCアプリケーションにSwaggerを実装する「簡単な」方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Transactionalアノテーションはどこに属しますか?
-
[解決済み] java:comp/env/は何をするところですか?
-
[解決済み] Spring Boot - 実行中のポートを取得する方法
-
[解決済み] Spring Dataです。"delete by "はサポートされていますか?
-
[解決済み] Spring CrudRepositoryで大文字小文字を区別しないクエリ
-
[解決済み] Spring Bootアプリケーションの環境指定application.propertiesファイル [終了しました]。
-
[解決済み] Springは@Autowiredアノテーションを付けずにコンストラクタに依存性を注入する
-
[解決済み] Spring Bootです。PasswordEncoderはどのように指定するのですか?
-
[解決済み] SpringでSession Objectを取得するには?
-
[解決済み] OncePerRequestFilterとは何ですか?