c# - 对 dto 和类对象进行逻辑检查
问题描述
我继承了维护一个小型战斗游戏的工作。
游戏可以运行,但是当用户单击浏览器中的“结束”按钮时,游戏永远不会保存到数据库中。
通过 API 接收到“HttpPut”请求后调用此方法:
protected override TroopMappingSession UpdateGameModel(TroopMappingSession g, TroopMappingSessionDto dto)
{
var retval = base.UpdateGameModel(g, dto);
if (dto.IsActiveBattle != null && dto.IsActiveBattle == false) {
GameService.SaveToDatabase(g);
}
return retval;
}
“dto”代表TroopMappingSessionDto,它是一个数据传输对象。
“g”代表TroopMappingSession 类的模型。
“retval”表示TroopMappingSession 类的更新模型。
就像这样, dto.IsActiveBattle 总是“真”并且 GameService.End() 从未被调用过。
如果我将dto.IsActiveBattle == false更改为retval.IsActiveBattle == false,那么它会被调用。
我的问题是,检查 dto.IsActiveBattle 和 retval.IsActiveBattle 是否有意义?
我不确定为什么原始开发人员同时检查 dto.IsActiveBattle != null 和 dto.IsActiveBattle == false。
谢谢!
解决方案
尝试这个
protected override TroopMappingSession UpdateGameModel(TroopMappingSession g, TroopMappingSessionDto dto)
{
var retval = base.UpdateGameModel(g, dto);
//if (dto.IsActiveBattle != null && dto.IsActiveBattle == false) {
GameService.SaveToDatabase(g);
//}
return retval;
}
检查游戏是否保存。这证明您的 retval 和 GameService 正在工作
然后您可以添加一些逻辑以确保它仅在 dto.IsActiveBattle 为 false 时保存。
关键是当 var retval = base.UpdateGameModel(g, dto); 时可能 dto.IsActiveBattle 被更改为 true;被称为。
推荐阅读
- python - 一键获取多个结果(python/tkiner)
- python - 将列表中的字符串项转换为浮点数
- java - 如何在 onResume (Android / Java) 中动态调整视图位置
- html - 推迟默认的等高行为 bootstrap 4
- vowpalwabbit - 在 Vowlpal Wabbit 中离线评估策略 + 探索的正确方法
- json - 是否有用于 HTTP 请求的通用 JSON 结构化日志记录结构?
- python - 从字符串到浮点 python
- google-apps-script - 特定日期和时间的价格
- nginx - 如何判断 nginx sites-available 是否已启用 Ubuntu 20.04?
- angular - 尝试将 @ionic/angular 添加到现有的 angular 12 应用程序失败