如何解决直接从类更新模型中的数据
我正在制作一个简单的游戏作为基于随机事件的练习项目,以便更轻松地添加新事件我决定使用关键字系统,其中每个事件都会获得分配给它们的关键字,然后用于处理事件,这可以像显示消息、更改模型中的数据或在随机表上再次滚动一样简单。
我有一个随机决定一个事件并返回带有关键字的字符串列表的类。
我想创建一个类,其中所有关键字都存储为方法,然后可以使用列表调用。
像这样:
class Keyword
{
public void InputKeywords(List<string> Ikeywords)
{
foreach (var item in Ikeywords)
{
switch (item)
{
case "keyword0":
keyword0();
break;
case "keyword1":
keyword0();
break;
case "keyword2":
keyword0();
break;
}
}
}
private void keyword0()
{
//do something
}
private void keyword1()
{
//do something
}
private void keyword2()
{
//do something
}
}
现在我面临的问题是从关键字类更新模型中的数据。 因为事件是随机选择的,所以我不知道为每个事件发送什么数据给类以使其更新。
我自己想出的解决方案:
- 使我的模型保持静态,不再出现访问数据的问题,Google 告诉我这是不赞成的,应该避免。
- 将模型发送到 Keyword 类,执行一些魔术,然后返回模型。将是一个简单的解决方案,但对我来说感觉不对,根据我对 MVVM 的理解,数据应该从视图模型更新,但我可能在盒子里想得太多。
- 收集所有可能要更改的数据到一个单独的类中,将其发送到关键字类,然后更新模型。这听起来很麻烦,感觉就像我只是将问题移到别处。
我觉得我错过了这样做的“正确”方式。什么是“最佳”方法?
解决方法
首先,关键字类的命名在这里感觉有误导性。它基本上是一个事件处理程序,所以我也将它命名为(例如 RandomEventGenerator)
对于您的问题,我也不建议您使用静态模型。你的可测试性会受到影响,因为你不会在那里使用依赖注入。话虽如此,您的第二种方法似乎朝着正确的方向发展。我建议使用注入一个 EventInvoker 接口。
home.pug
这可以在操作员中实现,该操作员可以访问您的数据模型并具有修改数据的预定义操作。
public interface IEventInvoker
{
public void RaiseEvent();
}
有了 IEventInvoker 的列表,您就可以转到您的 EventHandler。
public class WeatherOperator : IEventInvoker
{
private readonly WeatherEngine _weatherEngine;
public WeatherOperator(WeatherEngine weatherEngine)
{
_weatherEngine = weatherEngine;
}
public void RaiseEvent()
{
StartSunshine();
}
public void StartSunshine()
{
_weatherEngine.RemoveClouds();
_weatherEngine.SetSunPosition(DayTimes.Noon);
}
public void LetItRain()
{
_weatherEngine.SetCloudes(CloudModes.FullCover);
_weatherEngine.SetRain(RainIntesity.Medium);
}
}
请注意,为了保持小,我在这里没有使用空检查或输入验证,这是强烈推荐的。 通过这种方法,您可以清楚地区分模型/数据和视图模型/数据访问器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。