【问题标题】:MVC + Repository Pattern - Still depends on Data Model?MVC + 存储库模式 - 仍然依赖于数据模型?
【发布时间】:2010-04-26 22:03:21
【问题描述】:

我已经为学校启动了一个项目,我在其中使用 ASP.NET MVC 2 + LINQ2SQL 和一个业务层,因此我的 UI 不会直接与数据库交互。我的问题是这样的:

在我的 MVC 项目中,当打开视图和传递数据时,我仍然必须包含我的 Data 项目才能访问我的 Linq2Sql 项目中的类。这是正确的吗?

例子:

控制器:

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

我仍然需要在我的 linq2sql 数据项目中引用 Class 类 - 我的 UI 不应该完全独立于我的数据层吗?或者也许我做错了。

【问题讨论】:

    标签: asp.net-mvc mvccontrib


    【解决方案1】:

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

    所以它看起来像:

    LinqToSQL 类 -> MyClass(此时 Repository 的输出)->(控制器映射到特定视图的模型)MyModel。

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

    【讨论】:

    • 当您说每个视图的模型时,您是指控制器的索引、编辑、创建、视图的模型吗?或者一般来说,每个对象都有一个模型,用控制器来操作?现在,我创建了一些视图模型来传递附加数据以及我的 linq 2 sql 类。
    • 我的意思是每个视图都有一个模型。所以是的,索引、编辑、创建模型等...将您的 linq2sql 类映射到您的视图模型中,因为视图模型不应直接与 linqtosql 模型相关联。此外,您查看模型可能不需要在每种情况下包含在 linqtosql 或存储库类中的所有数据。
    • 啊,我明白了,非常感谢,非常有帮助。我想我的最后一个问题是,这如何证明在未来有回报?对我来说,这似乎是更多的工作(构建包装模型)。使用 linq 2 sql,我获得了验证属性,然后我必须为我的视图模型做同样的事情。
    • 您将后端与前端分离。这是 MVC 的主要原则之一,您只需将其扩展到数据层。如果您想更换后端,您可以轻松地将数据层重新映射到您的类,并且视图和模型根本不需要更改。换一个 DLL 就完成了。
    【解决方案2】:

    看看 MVC Central 上的 Golf Tracker 系列,它可以满足您的需求以及 Kelsey 的描述。

    http://www.mvccentral.net

    【讨论】:

    • 感谢您的链接 - 您的代码非常干净。我将在我的测试站点上进行一些重构以进行整理。
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多