ASP.Net MVC - 啥替换事件以支持松散耦合?

Posted

技术标签:

【中文标题】ASP.Net MVC - 啥替换事件以支持松散耦合?【英文标题】:ASP.Net MVC - What replaces events to support loose coupling?ASP.Net MVC - 什么替换事件以支持松散耦合? 【发布时间】:2011-02-03 10:42:00 【问题描述】:

ASP.Net MVC 的哪些功能可以替代 Web 表单中使用事件的方式来支持松散耦合的组件?

以 Webforms 中的简单分页器控件为例:

    点击了页码 Pager 使用新页码触发“PageChange”事件 此订阅页面/控件接收到事件并处理发起调用以获取和绑定新数据。

ASP.Net MVC 中有哪些工具可以提供类似的支持

松散耦合 组件可重用性 单个页面/视图的逻辑分离(这样一个非常复杂的“门户”类型页面)。

【问题讨论】:

RenderAction(...) 是你的朋友。 这可能是 Webforms 第一次被描述为“松散耦合”...... mxmisile,感谢您的提示。我会对此进行更多研究。 Womp - 没有帮助。事件是一种可用于创建组件松散耦合的技术。 WebForms 是围绕事件构建的。 【参考方案1】:

MVC 取消了事件,因为在大多数情况下,事件只是客户端试图告诉服务器执行的操作和服务器实际执行的操作之间的一个不必要的层。

在 webforms 的分页示例中,客户端单击按钮,浏览器发送事件/视图状态,引擎触发 ButtonClicked 事件。您检查事件,确定客户端打算分页,然后执行分页逻辑。

在 MVC 范例中,用户单击一个按钮,该按钮直接向执行分页逻辑的代码发出请求。既然你知道当你把按钮放在那里时应该调用什么动作,为什么还要经历事件触发的所有机制呢?在您的控制器中,您当然可以在收到命令时触发事件,但老实说,我无法想象这样做的用例。

这两种方法完成相同的事情,但 MVC 只是去除了一层复杂性。

【讨论】:

【参考方案2】:

ASP.NET MVC 和一般的模型-视图-控制器支持松散耦合和关注点分离,方法是将支持应用程序的数据和代码与用户看到的可视“表示层”标记分开.

设计得当,MVC 中的控制器和视图可以重复使用,以便实体的编辑视图可以“嵌入”到相关视图中而无需修改。

例如:Orders 视图可能包含 OrdersDetail 部分视图。该部分视图可以替换为在应用程序的其他地方也可用的 OrderDetail 编辑视图。

通过将代码从表示层的上下文中分离出来,将模型与视图分离使得单元测试更有效且更简单。您不想引用 System.Web 来对从数据库中获取数据的代码进行单元测试。

【讨论】:

感谢您的回复戴夫。所以,我得到了局部视图的想法。我仍然不明白如何 可以制作松散耦合的组件。以分页器为例,如何在一个实例中分页 Orders,在另一个实例中分页用户,而不需要大量重复的 c# 代码?我确信一定有一种方法(尤其是对于以“不要重复自己”编码而自豪的框架 - 我只是还看不到它。 查看blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt 以获取有关如何完成的快速示例。您的模型不是 List 您可能会返回 PagedList 以及 PagedList 实现中可以包含多少页的逻辑。然后你可以制作一个处理 PagedList 的通用部分。 感谢 Jab - 这是一些有助于在 MVC 中进行分页的有趣代码。然而,我真正想要解决的并不是分页本身,而是如何开发松散耦合的组件以在 MVC 框架中使用。即使有这个代码示例,我也不聪明。 我认为您可能正在尝试将“组件”的概念从 webforms 世界映射到 MVC。 MVC 并没有像 webforms 那样真正实现组件。最接近的是 html Helpers。 OK - 以我们的寻呼机示例为例。我们有包含在用户列表视图和订单视图中使用的寻呼机的部分视图。我们如何编写代码(使用 HTML Helpers 或 MVC 中可用的任何其他工具)以在单击部分视图中的页面链接时绑定正确的列表?

以上是关于ASP.Net MVC - 啥替换事件以支持松散耦合?的主要内容,如果未能解决你的问题,请参考以下文章

asp.net三层架构与asp.net MVC各自的区别,各自应该应用在啥场合,在啥情况下用三层,啥情况下用MVC

ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)

ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)

jQuery Validate:在 ASP.NET MVC 5 应用程序中添加事件以提交按钮单击

ASP.NET Core MVC 入门到精通 - 3. 使用MediatR

我需要更改啥以允许我的 IIS7 ASP.Net 3.5 应用程序创建事件源并将事件记录到 Windows EventLog?