ASP.Net MVC 的哪些功能可以替代 Web 表单中使用事件的方式来支持松散耦合的组件?
例如,在 Webforms 中使用一个简单的分页器控件:
- 点击页码
- Pager 使用新的页码触发“PageChange”事件
- 此订阅页面/控件接收到事件并处理启动调用以获取和绑定新数据。
ASP.Net MVC 中有哪些工具可以类似地支持
- 松耦合
- 组件可重用性
- 单个页面/视图的逻辑分离(这样一个非常复杂的“门户”类型页面)。
ASP.Net MVC 的哪些功能可以替代 Web 表单中使用事件的方式来支持松散耦合的组件?
例如,在 Webforms 中使用一个简单的分页器控件:
ASP.Net MVC 中有哪些工具可以类似地支持
ASP.NET MVC 和一般的模型-视图-控制器支持松散耦合和关注点分离,方法是将支持应用程序的数据和代码与用户看到的可视“表示层”标记分开。
如果设计得当,MVC 中的控制器和视图可以重复使用,这样实体的编辑视图就可以“嵌入”到相关视图中而无需修改。
例如:Orders 视图可能包含 OrdersDetail 部分视图。该部分视图可以替换为在应用程序的其他地方也可用的 OrderDetail 编辑视图。
通过将代码从表示层的上下文中分离出来,将模型与视图分离使得单元测试更有效且更简单。您不想引用 System.Web 来对从数据库中获取数据的代码进行单元测试。
MVC 取消了事件,因为在大多数情况下,事件只是客户端试图告诉服务器执行的操作和服务器实际执行的操作之间的一个不必要的层。
在 web 表单的分页示例中,客户端单击按钮,浏览器发送事件/视图状态,引擎触发 ButtonClicked 事件。您检查事件,确定客户端打算寻呼,然后执行寻呼逻辑。
在 MVC 范例中,用户单击一个按钮,该按钮直接向执行分页逻辑的代码发出请求。既然你知道当你把按钮放在那里时应该调用什么动作,为什么还要经历事件触发的所有机制?在您的控制器中,您当然可以在收到命令时触发一个事件,但老实说,我无法想象这样做的用例。
两种方法都完成了同样的事情,但 MVC 只是去除了一层复杂性。