dto和类对象的逻辑检查

时间:2018-11-20 16:51:39

标签: c# asp.net-mvc asp.net-web-api 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始终为“ true”,并且从未调用GameService.End()。

如果我将 dto.IsActiveBattle == false 更改为 retval.IsActiveBattle == false ,那么确实被呼叫了。

我的问题是,同时检查dto.IsActiveBattle和retval.IsActiveBattle是否有意义?

我不确定为什么原始开发人员同时检查dto.IsActiveBattle!= null和dto.IsActiveBattle == false。

谢谢!

1 个答案:

答案 0 :(得分:2)

尝试一下

  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。被叫。