【发布时间】: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