3

検索には「Dapper」、CRUD操作には「NHibernate」を使用する予定です。したがって、このアプローチに従うのは良い設計でしょうか。私が最近直面した問題の 1 つは、CRUD 画面に関するものです。

Edit Orderフォームがあるとします。Dapper からエンティティ (注文) を取得しています。更新中に、これらのオブジェクトを NHibernate セッションにアタッチして CRUD 操作を実行する必要があります。直接必要なものではありません。つまり、object.delete() を意味します。

誰でもこのデザインに関する提案を提供できますか?それを改善する可能性はありますか? asp.net mvc 3 を使用して開発された Web アプリケーションです。


返信に関する質問:

  1. アクションのセッションフィルターは、現在の操作に使用しているものを意味しますか? その場合、GET 操作は [NHSession] ではなく [DapperSession] にする必要がありますか?

    [NHSession] <<--------[DapperSession] GET ACTION RESULT

    • DapperSession.Get.Entity(1000)
    • ビューを返す
  2. 私はまだあなたが投稿した PRG パターンを理解しようとしています。疑問があれば投稿します。

  3. これはすべて「EDIT」操作で発生するため、NHibernate を使用してオブジェクトを取得することも賢明です。これにより、このすべてのプロセスが不要になり、オーバーヘッドはほとんどかかりません。

4

1 に答える 1

2

一見したところ、これはコントローラーの POST アクション メソッドに対して GET と NHibernate に Dapper (または別のマイクロ ORM) を使用するという論理的な選択のように思えます。擬似コードを参照してください):-

[DapperSession]
GET ACTION RESULT
  - DapperSession.Get.Entity(1000)
  - Return view

およびpostメソッドの場合

[NHSession, DapperSession]
POST ACTION RESULT
  If Model.State is valid
    - entity = NHSession.Get.Entity(1000)
    - update entity
    - redirect to ...
  end if

 - DapperSession.Get.Entity(1000)
 - return view

ご覧のとおり、POST アクションの結果に対して異なるアクション フィルターが必要になる場合があるため、これはそれほどエレガントではありません。これを整理するには、Post Redirect Get (PRG) パターンを利用して、GET コントローラーが Dapper を使用し、POST コントローラーが NHSession にのみアクセスできるようにします。

このパターンの設定方法の詳細については、SO で受け入れられたこの回答を参照してください。

これで、GET および POST アクションの結果は次のようになります。

[DapperSession, ImportModelStateFromTempData]
GET ACTION RESULT
  - DapperSession.Get.Entity(1000)
  - Return view

およびpostメソッドの場合

[NHSession, ExportModelStateToTempData]
POST ACTION RESULT
  If Model.State is valid
    - entity = NHSession.Get.Entity(1000)
    - update entity
    - redirect to ...
  end if

 - return redirect to GET

ただし、ご覧のとおり、私が実際に行っていることは、あるアクション フィルター属性を別の属性に置き換えることだけです。しかし (これは大きな問題ですが、私の意見では)、PRG パターンを利用することでメリットが得られます! 正直なところ、これはおそらく私たちの質問に直接答えることはできませんが、従うのに適した方法です。

于 2012-08-26T09:46:28.743 に答える