序言:这个问题与 ASP.NET MVC 框架无关。
编辑:更清楚地说,该应用程序是用 C# 编写的游戏,因此各种 Web 框架都不适用。
在使用 MVC 模式构建东西时,我应该如何最好地将类与事件联系起来?
我想写一些 MVC 代码,这样我就可以了解更多关于设计模式的信息。我理解为什么模式的这三个元素中的每一个都应该是分开的,但我不确定如何实现将它们连接在一起。我正在用 C# 编写这个,我也是新手,我觉得应该使用事件。我主要不确定我应该如何正确订阅/取消订阅事件,我需要进行健全性检查。
例如,我将发布 View/Controller 类。在这个例子中,视图想要发送一个 DataRequest 事件,而控制器想要订阅它以便将它传递给模型。另一方面,控制器会在某些时候引发视图应该订阅的 DataUpdated 事件。我实现它们相互订阅的方式是否有意义?
////////////////////////////////////////////////////
public class UIScreenView
{
public event System.EventHandler<System.EventArgs> DataRequestedEvent;
//====================================
private void DataUpdatedEventHandler(object sender, System.EventArgs args);
//====================================
//====================================
public void Subscribe(UIScreenController controller)
{
controller.DataUpdatedEvent += DataUpdatedEventHandler;
controller.Subscribe(this);
}
//====================================
//====================================
public void UnSubscribe(UIScreenController controller)
{
controller.DataUpdatedEvent -= DataUpdatedEventHandler;
controller.UnSubscribe(this);
}
}
和控制器:
public class UIScreenController
{
private UIScreenView view;
public event System.EventHandler<System.EventArgs> DataUpdatedEvent;
private void DataRequestedEventHandler(object sender, System.EventArgs args);
public void Init(UIScreenView v)
{
view = v;
if (view != null)
{
view.Subscribe(this);
}
}
~UIScreenController()
{
if (view)
{
view.UnSubscribe(this);
view = null;
}
}
public void Subscribe(UIScreenView view)
{
view.DataRequestedEvent += DataRequestedEventHandler;
}
public void UnSubscribe(UIScreenView view)
{
view.DataRequestedEvent -= DataRequestedEventHandler;
}
private void DataRequestedEventHandler(object sender, System.EventArgs args)
{
//request data from model
}
}