静态方法,非静态成员 - 数据访问层/业务层

时间:2012-07-24 16:22:12

标签: asp.net-mvc-3 linq c#-4.0 web-applications architecture

好的,我正在创建一个Web应用程序。我正在使用MVC3。我有ViewModel用于每个视图,我也有数据模型支持viewModel并在我的sql表中执行actuall 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上的My Controller就是这样做的。

 MyClassViewModel.UpdateMember(obj,out strErrMsg)

由于它在一个强类型视图上创建的每个帖子上的mvc,我的ViewModel的一个新对象,因此非静态成员是不同的,不会在会话之间共享。

我正在使用Linq,因此在我使用

的DataModel的每个静态方法上
  var db = new MyApplicationDataContext()

获取我的linq课程并对其进行处理。这解决了我的开/关读者问题。

我的问题是,这个设计的并发性有什么问题吗?我知道如果不是通过接口设计我可能在更改我的数据层时遇到问题,但我非常怀疑这是否需要基于我的应用程序。

1 个答案:

答案 0 :(得分:0)

您实际上是在使用工厂设计模式。这是可以使用的模式;每个静态方法都有自己的上下文,这也没关系。你总是要担心并发;但是,LINQ to SQL体系结构内置了并发检测,并在对此做出并发更改时抛出ChangeConflictException。

我还强烈建议您在每次静态方法调用结束时正确处理上下文,因为您可能会保留与数据库的开放连接,从而导致性能问题。

另外,您可能遇到的另一个问题是链接数据;您不能通过引用将两个对象链接在一起,这些对象是从不同的上下文创建的。在LINQ to SQL中,没有办法明确地分离对象......