这个问题有点反问。我在某些时候感觉ASP.NET MVC不是MVC模式的正统实现,或者我没有理解它。
考虑以下领域:电灯泡、开关和运动检测器。它们连接在一起,当您进入房间时,运动检测器会打开电灯泡。如果想将它们表示为MVC:
- 开关是模型,因为它保存状态并包含逻辑。 - 灯泡是视图,因为它向人类呈现模型的状态。 - 运动检测器是控制器,因为它将用户操作转换为通用模型命令。
开关有一个私有字段(On/Off)作为状态,两个方法(PressOn,PressOff)。如果在关闭状态下调用PressOn,则会变为开启状态;如果再次调用,状态不会改变。
灯泡可以用蜂鸣器替换,运动检测器可以用定时器或按钮替换,但是模型仍然表示相同的逻辑。最终,系统行为相同。
这就是我理解的经典MVC分解方式,如果我错了,请纠正我。
现在让我们按照ASP.Net MVC的方式进行分解。
- 灯泡仍然是视图。 - 控制器将是开关+运动检测器。 - 模型是一些对象,只需将状态传递给灯泡。
因此,定义行为的逻辑移动到了控制器中。
问题1:我对MVC和ASP.NET MVC的理解是否正确? 问题2:如果是,请问您是否同意其不是100%准确的实现?
最后一个问题是如何在ASP.NET MVC中将模型与控制器分离。有两个极端。控制器只做基本工作,并调用模型来执行所有逻辑。另一种是控制器处理所有逻辑,而模型只是类似于映射到数据库的属性的东西。
问题3:我应该在这些极端之间划分界限?如何平衡呢?
谢谢, Andrey
考虑以下领域:电灯泡、开关和运动检测器。它们连接在一起,当您进入房间时,运动检测器会打开电灯泡。如果想将它们表示为MVC:
- 开关是模型,因为它保存状态并包含逻辑。 - 灯泡是视图,因为它向人类呈现模型的状态。 - 运动检测器是控制器,因为它将用户操作转换为通用模型命令。
开关有一个私有字段(On/Off)作为状态,两个方法(PressOn,PressOff)。如果在关闭状态下调用PressOn,则会变为开启状态;如果再次调用,状态不会改变。
灯泡可以用蜂鸣器替换,运动检测器可以用定时器或按钮替换,但是模型仍然表示相同的逻辑。最终,系统行为相同。
这就是我理解的经典MVC分解方式,如果我错了,请纠正我。
现在让我们按照ASP.Net MVC的方式进行分解。
- 灯泡仍然是视图。 - 控制器将是开关+运动检测器。 - 模型是一些对象,只需将状态传递给灯泡。
因此,定义行为的逻辑移动到了控制器中。
问题1:我对MVC和ASP.NET MVC的理解是否正确? 问题2:如果是,请问您是否同意其不是100%准确的实现?
最后一个问题是如何在ASP.NET MVC中将模型与控制器分离。有两个极端。控制器只做基本工作,并调用模型来执行所有逻辑。另一种是控制器处理所有逻辑,而模型只是类似于映射到数据库的属性的东西。
问题3:我应该在这些极端之间划分界限?如何平衡呢?
谢谢, Andrey