如何通知UI有关在API中完成的操作?

时间:2015-10-16 23:52:15

标签: c# .net wpf winforms c#-6.0

我正在写一个简单的游戏,比如tic tac toe(只有我的更大)。游戏很简单:轮到我,检查是否赢了,机器人转弯,检查是否赢了。我有简单UIAPI使用Domain Entites(现在不重要)。因此,当用户移动时,API将更新电路板,将知道下一步移动是机器人的移动,因此将执行此操作并且...必须通知UI。这是我的问题。

我的问题是: 如何通知UI有关机器人的举动?我的意思是,保持简单但坚持最好的编程实践。

我的第一个想法是在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...
    }
}

1 个答案:

答案 0 :(得分:1)

  

我的第一个想法是在GameAPI类中创建一个事件。这是个好主意吗?

是的,为什么不呢?让我们举例说明现代UI框架数据绑定。使数据绑定工作的关键是在修改对象的某些属性值时提供属性更改通知(读取 - 事件)。通常是通过IPropertyNotifyChanged界面实现的,这只是宣布支持PropertyChanged 事件的多态方式。这样,如果通过代码设置对象属性,UI将自动更新。希望您看到与您的案例的相似性 - API执行某些操作并引发事件,UI(作为某些事先处理该事件的附加处理程序)接收事件并相应地更新。