【问题标题】:Winforms to ASP.net migration with MVC pattern : how to manage events?Winforms 到带有 MVC 模式的 ASP.net 迁移:如何管理事件?
【发布时间】:2017-11-09 18:57:23
【问题描述】:

我正在使用 C#/WinForms 创建一个应用程序,该应用程序可能会在不久的将来迁移到 Web 应用程序,因此我正在尝试找出最佳使用模式。

我的问题是管理事件的最佳方式是什么?就个人而言,我可以想到两种可能的解决方案:

第一个:

Interface

public interface IAttributionView
{
    event ButtonClicked ControllerTestEvent;
}

Form

public delegate void ButtonClicked();    
public partial class AttributionFrm : Form,IAttributionView
{
    public event ButtonClicked ControllerTestEvent;

    public AttributionFrm()
    {
        InitializeComponent();
    }

    private void butTest_Click(object sender, EventArgs e)
    {
        ControllerTestEvent();
    }
}

Controller

public class AttributionController
{
    private IAttributionView _view;

    public AttributionController(IAttributionView view)
    {
        _view = view;
        view.ButtonClicked += new ButtonClicked(Test);
    }

    private void Test()
    {
        //Do Something
    }
}

第二个:

Form

public partial class AttributionFrm : Form,IAttributionView
{
    private AttributionController _controller;

    public AttributionFrm(AttributionController controller)
    {
        _controller=controller;
        InitializeComponent();
    }

    private void butTest_Click(object sender, EventArgs e)
    {
        _controller.Test();
    }
}

Controller

public class AttributionController
{
    private IAttributionView _view;

    public AttributionController(IAttributionView view)
    {
        _view = view;
    }

    private void Test()
    {
        //Do Something
    }
}

我根本不了解 ASP.net,这就是为什么我想从您的意见和经验中了解实现这一目标的最佳方法是什么(适应的简单性、代码的复杂性等等)?

非常感谢。

【问题讨论】:

  • Juan 的回答很好,但重要的是要强调,当涉及到实际的用户体验时,它们确实是不等价的。真正的问题是与 Windows 桌面应用程序相比,用户如何在浏览器中“体验”他们的 UI 工作流程。根据应用程序的复杂性,并假设应用程序仅使用静态网页重新创建,它可能会让用户无休止地等待页面加载。如果你要实现比基本 CRUD 功能更复杂的东西,我会小心使用 Razor 页面并考虑如何使用 Angular 等框架重新创建 UI
  • 这样想:Windows 窗体应用程序是您的前端。因此,您拥有的一些事件处理程序是 UI 逻辑的事件处理程序,它们不是业务逻辑。例如,如果您已加载“州”和“城市”,并通过从组合框中选择一个州,您会显示该州的城市,那么组合框的 SelectedIndexChanged 方法是一个前端事件,您不应该将其转换为动作。但是为您加载数据的方法是一个动作。所以首先想一想:如何才能让你的应用程序面向服务。这将回答您的问题。

标签: c# asp.net-mvc winforms design-patterns


【解决方案1】:

事件是连接环境的范例。网络已断开连接。 http 帖子中没有事件,只有请求和响应。

使用 MVC 进入 ASP.NET 需要改变您的思维框架。

您现在正在处理针对特定action 的帖子,该controller 管理。

如果您这样想,您的event 可以映射到一个操作,该操作反过来执行您打算封装的代码。

这两个将变得等价:

//Winforms
private void butTest_Click(object sender, EventArgs e)
{
    //Your code here
}

//MVC
public ActionResult Test()
{
    //Your code here 
}

相应的按钮<input type="submit" value="Click here to Test"> 将位于向/Attribution/Test 提交http 请求的表单标签内。

【讨论】:

  • 我不太明白。我很快阅读了一些教程,我看到 ASP.net 中有控件和事件。我错了吗?
  • @Gadsweb:你特别提到了 MVC。另一种较旧的模式称为 WebForms,它执行 模拟 事件。不过我不会推荐它。
  • 好吧,这是一个快速的概述,我没有发现这个区别。现在对我来说有点清楚了。此时最好在表单中引用我的“控制器”并调用事件调用的方法。确实在控制器中捕获事件是更多的工作和复杂性。感谢您深思熟虑的建议。
猜你喜欢
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
相关资源
最近更新 更多