2011-08-02 13 views
1

ここでは、会社でASP.Net MVC、jQuery、LinqToSql、StructureMapを使用するプロジェクトがいくつかあります。ASP.NET MVC - 作業単位とセッションの比較

私はこのような状況を想定します:会社の編集ページ。このページには、DetailsとEmployeesという2つのタブがあります。詳細は、名前、電話などの会社の詳細です。従業員タブでは、私はjqueryグリッドにすべての社員が参加します。これらの従業員は、ユーザーが従業員を編集したり削除したりすることができるため、セッションから来ており、これらの変更はすべて同じセッションに設定されます。そして、ユーザーは、従業員を何度も編集したり、新しい従業員を追加したり、同じ新しい従業員を削除したりすることができます。

このページの下部には、[保存]と[キャンセル]ボタンがあります。 Saveをクリックすると、セッションから従業員を取得してデータベースに保存します。これはちょっとした仕事です。

一部の同僚は、セッションの使用を断念し、ユニット作業を開始する必要があると述べました。だから、私はそれについていくつかの記事やブログなどを読むようになった。

セッションを使用して削除し、すべてのデータを保持するためにUoWを使用する方法は、ユーザーがページ内で行ったことすべてを正しく維持する方法です。

これまでのところ、いくつかの手法では何も見つかりませんでした。

ありがとうございます!

+0

私は分かりません。あなたの従業員データはセッションから来ていますか?どのようにセッションに入るのですか? 2人のユーザーが同時に使用でき、従業員を編集することができますが、もう1人のユーザーは古いデータを取得し、同じユーザーを編集するともう一方のユーザーの変更を上書きします。 –

+0

はい、セッションから来ています。私はセッションからどのように来ているのかについて詳しくは分かりません。それは貧しい選択です。ユーザーは同時に編集することができます。これらのセッションを使用して作業ユニットをどのように使用するかを把握しようとしています。最高のテクニックは何ですか? – AndreMiranda

+0

@mystere。いいえ、あなたは間違っています。 2人のユーザーがセッションにアクセスできません。セッションは各ユーザーに固有です。ユーザーセッションは1人のユーザーのみがアクセスできるため、セッション内のデータの格納は他のユーザーによって決して変更されません。 –

答えて

1

実際、UoWはセッションの代わりにデータを保持するためのパターンに過ぎません。セッションは引き続き使用されます。つまり、UoWはNHibernateセッションとのやりとりを担当します。ここで

public ActionResult Edit(Employee model) 
{ 
    using(IUnitOfWork uow = UnitOfWork.Start()) 
    { 
     employeeRepository.Save(model); 

     uow.Commit(); 
    } 

    return Json("Success); 
} 

周りのセッションを渡すとは対照的に、あなたが明示的にトランザクションの境界をマークしている典型的なUOWの実装では、このようなものに見えるかもしれません。 NHibernateのためのUoWを実装するための素晴らしいリソースはhereです。

+0

この一時的なデータ操作を置き換えるワットはありますか?今のところ、私はセッションを操作していますが、それを置き換える方法はありますか? – AndreMiranda

+0

あなたのアーキテクチャについてもっと知る必要があります。通常、セッションは一時的な格納には使用されません(特にWebアプリケーションの場合)。セッションと言うときは、NHibernateセッションまたは他のいくつかのストアを意味しますか? – lcranf

+0

ASP.NETセッション。従業員のタブでは、ユーザーが従業員を自由に管理することができるため、すべての従業員がASP.NETセッションからロードされます。従業員のデータをデータベースに保存するには、従業員セッションから取得します。私はNHibernateを使用していません。 LinqtoSql – AndreMiranda

0

私はファサード型のパターンが欲しいと思っています。 &のユーザーデータを保存することに対処するためのインターフェイスまたは基本クラスを作成します。セッションを使用する具象クラスを作成します。

作業単位またはその他のメカニズムに変更する場合は、新しい具体的な実装&を使用するだけです。あなたのコードは、あなたのデータがどこに保持されているのかを知りません。

Simon

関連する問題