2010-04-26 108 views
3

我已经开始了一个学校的项目,我正在使用ASP.NET MVC 2 + LINQ2SQL和一个业务层,所以我的UI不直接与数据库交互。我的问题是这样的:MVC +存储库模式 - 仍然依赖于数据模型?

在我的MVC项目中,当提出视图并传递数据时,我仍然需要包含我的Data项目以访问我的Linq2Sql项目中的类。它是否正确?

例子:

控制器:

ClassesRepository cr = new ClassesRepository(); // this is from my Business project 
Class classToEdit = cr.GetByClassId(id); // "Class" is from my data project 

我还是要引用Class类在我LINQ2SQL数据的项目 - 不要我的用户界面是完全独立的我的数据层?或者,也许我正在解决这个问题。

回答

3

我更喜欢让我的存储库在内部对我自己的类进行映射。所以我从我的仓库返回的不是LinqToSql类,而是我自己的。然后,我将返回的类数据映射到每个视图的模型中。

所以看起来:

LinqToSQL类 - > MyClass的(从储存库输出在这一点) - >(控制器映射到建模为特定视图)为MyModel。

确保始终为每个视图创建一个模型。您可以使用您的存储库返回的内容,但这是一个捷径,将其映射到他们自己的视图模型将在未来获得回报。

+0

当你说每个视图模型,你的意思为索引,编辑模型,创建视图控制器吗?或者一般来说,每个物体都有一个模型,用控制器进行操纵?现在,我创建了几个视图模型来传递其他数据以及我的linq 2 sql类。 – Jack 2010-04-27 03:16:17

+0

我的意思是每个视图的模型。所以是一个索引,编辑,创建模型等...将您的linq2sql类映射到您的视图模型,因为视图模型不应直接绑定到linqtosql模型。你也可以查看模型在任何情况下都不需要包含在linqtosql或repository类中的所有数据。 – Kelsey 2010-04-27 03:19:39

+0

啊,我看到了,非常感谢,非常有帮助。我想我的最后一个问题是,这将如何在未来获得回报?它只是对我来说更多的工作(构建包装模型)。用linq 2 sql我有我的验证属性,然后我必须做我的视图模型相同。 – Jack 2010-04-27 21:13:41

1

看看MVC中心的高尔夫追踪系列,它能做到你想要的和Kelsey所描述的。

http://www.mvccentral.net

+0

感谢您的链接 - 您的代码非常干净。我将在测试网站上进行一些重构以整理。 – Jack 2010-07-30 16:04:59