使用MVC模式升级到ASP.net迁移:如何管理事件?

时间:2017-11-09 18:57:24

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

我在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,这就是为什么我想从您的意见和经验中了解实现这一目标的最佳方法(简化适应性,代码的复杂性)或者其他什么)?

非常感谢。

1 个答案:

答案 0 :(得分:2)

事件是连接环境的范例。网络已断开连接。 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">将位于向http提交/Attribution/Test请求的表单标记内。