在单独的程序集中使用 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 和模型的主要内容,如果未能解决你的问题,请参考以下文章