0

OK、Web アプリケーションを作成しています。MVC3を使用しています。すべてのビューにViewModelがあり、viewModelをサポートし、SQLテーブルで実際のCRUD操作を行うデータモデルもありますが、viewModelは必要に応じてデータを検証および変更します。

ここで質問です。私がコーディングしてきた方法は

 public class MyClassViewModel
 {
     public string member1{get;set;}
     public int member2{get;set;}

      public static GetAllMembers(MyClassViewModel obj, out string strErrMsg)
      {
          // code goes here, read operation
      }

      public static UpdateMyClass(MyClassViewModel obj, out string strErrMsg)
      {
           // code goes here, write operation.
      }
 }

私のViewModelとDataModelの両方がこのようにコーディングされています.HttpPostの私のコントローラーはこのようなことをするだけです..

 MyClassViewModel.UpdateMember(obj,out strErrMsg)

強く型付けされたビュー、ViewModel の新しいオブジェクトで作成されるすべての投稿の mvc であるため、非静的メンバーは異なり、セッション間で共有されません。

私はLinqを使用しているため、DataModelの各静的メソッドで使用しています

  var db = new MyApplicationDataContext()

私のlinqクラスを取得してそれらに取り組みます。これにより、リーダーのオープン/クローズの問題が解決されます。

私の質問は、この設計との同時実行に関して何か問題はありますか? インターフェイスを介して設計されていない場合、データレイヤーを変更する際に問題が発生する可能性があることはわかっていますが、アプリケーションに基づいてそれが必要であることは非常に疑わしいです。

4

1 に答える 1

0

基本的に、ファクトリ デザイン パターンを使用しています。これに使用するパターンは問題ありません。各静的メソッドには独自のコンテキストがあり、それも問題ありません。常に並行性について心配する必要があります。ただし、LINQ to SQL アーキテクチャには同時実行検出が組み込まれており、これに対応して同時変更が行われると、ChangeConflictException がスローされます。

また、データベースへの接続を開いたままにしておくと、パフォーマンスの問題が発生する可能性があるため、各静的メソッド呼び出しの最後にコンテキストを適切に破棄することを強くお勧めします。

また、遭遇する可能性のある別の問題は、データの相互リンクです。異なるコンテキストから作成された 2 つのオブジェクトを参照によってリンクすることはできません。また、LINQ to SQL では、オブジェクトを明示的にデタッチする方法はありません...

于 2012-07-24T17:06:04.387 に答える