在单独的程序集中使用 MVC 2.0 和模型

Posted

技术标签:

【中文标题】在单独的程序集中使用 MVC 2.0 和模型【英文标题】:Working with MVC 2.0 and the Model in a separate assembly 【发布时间】:2011-04-07 16:00:19 【问题描述】:

我是 MVC 的新手,尽管那里有很多(我的意思是很多)非常有用的信息 - 很难清楚地了解如何通过以下方式实现我的确切要求MVC 2.0。

我想设置如下解决方案:

使用 MVC 2.0 项目提供 Web UI。 使用 Linq to SQL 类项目进行数据持久化。 我有两个单独的代码模块需要访问上述 Linq to SQL 模型 - 因此我无法将我的 Linq to SQL 模型直接包含在 MVC 项目本身中。 我的 Linq to SQL 项目前面还有一个业务逻辑层。

我的问题是:

如何设置 MVC 应用程序的模型部分以通过 BLL 指向我的 Linq to SQL 项目? 如何执行 Web 应用验证?我可以使用 MVC 2.0 模型验证吗?如果不是,有什么替代方案? 最后(稍微搁置一旁) - 什么是 ViewModel,它与 Model 有何不同?

很多问题。但这是一项令人兴奋的新技术和数据访问问题,我必须很快掌握的所有其他内容,我认为 MVC 2.0 非常棒。

感谢您提供的任何指点。

【问题讨论】:

【参考方案1】:

如何设置我的模型部分 MVC 应用程序指向我的 Linq 到 通过我的 BLL 进行 SQL 项目?

通常您会为此使用存储库模式。您的控制器引用了您的存储库 - 存储库从您的数据库返回您的域对象。 MVC 应用程序不知道存在 LINQ to SQL。

如何执行网络应用验证? 我可以使用 MVC 2.0 模型验证吗?如果 没有什么替代品?

将视图模型放入您的 MVC 项目中。这些视图模型可能与您的领域模型紧密结合,但它们关注的是表示模型。将数据注释放在这些视图模型上进行验证 - MVC 框架将自动确保在这些用数据注释修饰的视图模型上进行验证。它是可插入的,因此您可以使用替代方案 - 但在 MVC 2 中,它已经很好地融入其中,其中包括客户端验证。

最后(稍微撇开)- 什么是 ViewModel 以及这有何不同 来自模型?

我在上面部分回答了这个问题。您的域模型的形状可能不是您显示视图所需的形状 - 视图模型非常适合弥合这一差距。此外,即使形状确实完全匹配 - 视图模型仍然是一个好主意,这样您就可以将 UI 验证代码和其他表示元数据放在那里(因为您不希望任何与域模型上的表示逻辑相关的东西) .

这是view model patterns的链接。

希望这会有所帮助。

【讨论】:

【参考方案2】:

    您可以添加对从 BLL 程序集中公开的对象的引用,并将它们用作您的模型。

    如果您想为生成的类添加验证,请使用buddy classes。

    ViewModel 是自定义形状的模型数据聚合。每个 View 都只有一个,因为 ViewModel 的目的是以方便简洁的方式准确显示特定 View 所需的数据。

一个示例可能是包含 Order 和 OrderDetail 信息的视图。 ViewModel 可以保存对每种类型的存储库和业务对象的内部引用。 ViewModel 的属性将来自这些对象的数据合并在一起。

ViewModel 在您的情况下也很有用,因为您希望您的模型位于单独的程序集中。您可以将 DataAnnotations 应用于 ViewModel 属性以进行验证。您可以让“原始”业务对象模型成为 ViewModel 的内部属性,并公开公共方法来检索和保存数据。

【讨论】:

以上是关于在单独的程序集中使用 MVC 2.0 和模型的主要内容,如果未能解决你的问题,请参考以下文章

在单独的程序集中启用带有上下文的迁移?

单独程序集中的 ASP.NET Core MVC 控制器

MVC 脚手架 - 参考程序集中缺少类

ASP.Net MVC 4. 在单独的程序集中路由控制器返回错误 404

Catel 延迟加载包含视图/视图模型的程序集

不同形式的预编译会影响性能吗?