如何通知UI在API中完成的操作
本文关键字:API 操作 UI 何通知 通知 | 更新日期: 2023-09-27 18:18:15
我正在编写一个简单的游戏,就像井字游戏(只是我的游戏更大)。游戏玩法很简单:轮到我,检查是否赢了,轮到对方,检查是否赢了。我有简单的UI
和API
,使用Domain Entites
(这现在不重要)。当用户移动时,API会更新棋盘,会知道下一个移动是bot的移动,所以会这样做。必须通知UI。这是我的问题。
我的问题是:如何通知UI关于bot的移动?我的意思是,保持简单,但坚持最好的编程实践。
我的第一个想法是在GameAPI类中创建一个事件。这主意好吗?今天会有新的东西,c# 6等等。我不确定:/现在UI是WinForms
,但我想在其他UI中使用这个API,如WPF甚至移动。下面是我简化的UI代码:
编辑:现在我说的是单人游戏。UI和API都是客户端。下一步会有多人模式通过中央服务器,但现在是单人模式。
public partial class Form1 : Form
{
private GameAPI api;
public Form1()
{
InitializeComponent();
api = new GameAPI();
}
private void boardClick(object sender, EventArgs e)
{
Field field = GetClickedField(e);
MoveResult result = api.MakeMove(clickedColumn);
if (result != null && result.Row >= 0)
{
MessageBox.Show(result.Row + "," + clickedColumn);
if (result.IsConnected)
{
MessageBox.Show("Success!");
}
}
}
}
和API:
public class GameAPI
{
public IGame CurrentGame { get; set; }
public void CreateGame(GameType type)
{
CurrentGame = new SinglePlayerGame();
}
public Result Move(int column)
{
if (CurrentGame == null) return null;
Player player = CurrentGame.GetNextPlayer();
if (player.Type == PlayerType.Human) return CurrentGame.Move(column, player.Id);
}
public Result MoveBot()
{
// Simulate Bot's move...
}
}
我的第一个想法是在GameAPI类中创建一个事件。这主意好吗?
是的,为什么不呢?让我们以现代UI框架的数据绑定为例。使数据绑定工作的关键点是在对象的某些属性值被修改时提供属性更改通知(read - event)。通常这是通过IPropertyNotifyChanged
接口实现的,这只是声明支持PropertyChanged
事件的多态方式。这样,如果您通过代码设置对象属性,UI将自动更新。希望您看到与您的案例的相似之处- API做一些事情并引发事件,UI(作为早些时候的某个点附加到该事件的处理程序)接收事件并相应地更新。