好的,我正在创建一个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课程并对其进行处理。这解决了我的开/关读者问题。
我的问题是,这个设计的并发性有什么问题吗?我知道如果不是通过接口设计我可能在更改我的数据层时遇到问题,但我非常怀疑这是否需要基于我的应用程序。
答案 0 :(得分:0)
您实际上是在使用工厂设计模式。这是可以使用的模式;每个静态方法都有自己的上下文,这也没关系。你总是要担心并发;但是,LINQ to SQL体系结构内置了并发检测,并在对此做出并发更改时抛出ChangeConflictException。
我还强烈建议您在每次静态方法调用结束时正确处理上下文,因为您可能会保留与数据库的开放连接,从而导致性能问题。
另外,您可能遇到的另一个问题是链接数据;您不能通过引用将两个对象链接在一起,这些对象是从不同的上下文创建的。在LINQ to SQL中,没有办法明确地分离对象......