3

从相当长的时间开始在asp.net MVC上工作今天在 通过MSDN上的一些示例代码时
遇到了一个理论问题 我读到了这样的东西


public class SomeController()
{
 public ActionResult SomeAction(SomeModel model)
 {
   var dataContext = new SomeDataContext();
   //basic CRUD operations on data context
   //
 }
}

这里数据库显然是通过控制器访问的,理论上是不正确
的,这个例子有什么问题,或者我对什么模型和控制器的定义需要刷新
更新:-
或者有可能每个地方都在MSDNModelsViewModels被认为是平等的

4

3 回答 3

4

介绍

MVC 设计模式相当古老。它最初是为 Smalltalk-80 应用程序定义的,当时“网络”是两个人在大学之间发送 ping。从那时起,它已经发展了很多。

MVC 设计模式背后的核心原则是关注点分离。该模式将表示与业务逻辑分开。表示层主要包含视图、控制器、模板、视图模型和演示者(取决于您使用哪种风格的 MVC 启发模式),而业务逻辑结束于模型层。

模型层虽然没有在模式中严格定义,但在 ASP.NET MVC 中由服务和服务使用的所有结构(包括模型对象,更好地称为域对象)组成。

关于这个问题

DataContext当您在寻找基本的 MVC 教程时,在控制器中看到使用是很常见的。MVC 架构意味着大型应用程序,在Hello-World示例中,完全实现的 MVC 架构看起来就像膨胀。

为了简单起见,这些示例牺牲了代码分离。与的交互DataContext基本上是存储逻辑,这是模型层处理的任务之一。当在控制器中使用时,这意味着您的模型层已经开始在表示层中泄漏,并且您最终会遇到“控制器胖,模型瘦”的问题。

在现实世界的应用程序中,这DataContext将是处理模型层内持久性的结构的一部分。可能作为数据映射器的一部分,如果您选择手动编写它们。

关于“更新”

模型(我想在这种情况下您的意思是域/模型对象)来自与 ViewModel 完全不同的应用层。

顾名思义,在 MVVM 模式中,ViewModel 取代了 Controller。ViewModel 从模型层获取数据,然后将其转换为可用于 View 的方式。

当您无法完全控制视图或/和模型层的行为时,最好使用此模式(如果您真的使用 MVVM)。例如:如果您受雇为 SAP 构建替代前端,或者当视图实际上是某种形式的硬件设备时,它需要特定类型的输入。

于 2013-01-22T15:44:47.040 回答
0

MVC是一种 GUI 模式,就像MVPMVVM一样,它与数据访问和持久性无关。确实,许多简单的 CRUD 应用程序并不比 MVC 和底层数据库更多,但在更复杂的应用程序中,MVC 将成为表示层的一部分。

作为DataContextO/RM 属于基础设施层,而不是 GUI。在 MVC 中Model可以理解为ViewModel,是的。

然而,控制器可以使用 DataContext 或任何其他方式从底层数据存储中检索此模型。

于 2013-01-22T13:20:31.070 回答
0

模型通常是数据类(代表数据库表)。视图模型通常被称为已创建的类,以便在视图中使用它们进行演示

DataContext在上述情况下,您将无法在视图模型上使用 ,但您可以将它与上述模型类(也称为 DTO 类)完美结合使用

于 2013-01-22T13:22:07.347 回答