And*_*rey 5 model-view-controller asp.net-mvc design-patterns
这个问题有点夸夸其谈.在某些时候,我感觉ASP.NET MVC不是MVC模式的真实实现.或者我不明白.
考虑以下域:电灯泡,开关和运动检测器.它们连接在一起,当您进入房间时,运动探测器开启灯泡.如果我想将它们表示为MVC:
Switch有一个私有字段(On/Off)作为State和两个方法(PressOn,PressOff).如果您在关闭时调用PressOn,它将变为开启,如果再次调用它,则状态不会更改.
灯泡可以用蜂鸣器,带定时器或按钮的运动探测器代替,但模型仍然代表相同的逻辑.最终系统将具有相同的行为.
这就是我理解经典MVC分解的方法,如果我错了请纠正我.
现在让我们以ASP.Net MVC方式分解它.
因此,定义行为的逻辑移动到控制器.
问题1:我对MVC和ASP.NET MVC的理解是否正确?
问题2:如果是,您是否同意ASP.NET MVC不是100%准确的实现?
并恢复生机.最后一个问题是如何在ASP.NET MVC的情况下将模型与控制器分开.可能有两个极端.控制器做基本的东西,并调用模型来做所有的逻辑.另一个是控制器,所有的逻辑和模型都是类似于具有映射到DB的属性的类.
问题3:我应该在哪里画出这种极端之间的界线?如何平衡?
谢谢,安德烈
我认为这两种情况都可能是这样。下面是 ASP.NET MVC 的实现,它保留了与第一个示例中相同的逻辑。
模型(存储库)
Function switchOn() as bulb
if !bulb.lightOn then
bulb.lightOn = true
end if
return bulb
End Function
Function switchOff() as bulb
if bulb.lightOn then
bulb.lightOn = false
end if
return bulb
End Function
Function Motion(senseMotion as boolean) as bulb
if(senseMotion and !bulb.lightOn) then
bulb.lightOn = true
end if
return bulb
End Function
Run Code Online (Sandbox Code Playgroud)
控制器
Function PressSwitchOn() as actionresult
return view("Bulb", lightRepository.switchOn)
End Function
Function PressSwitchOff() as actionresult
return view("Bulb", lightRepository.switchOff)
End Function
Function SomethingMoved(byval hasMoved as boolean) as actionresult
return view("Bulb", lightRepository.Motion(hasMoved))
End Function
Run Code Online (Sandbox Code Playgroud)
我的控制器中没有业务逻辑,它只是将状态从模型传递到视图。我在你的例子中吗?
回答问题。