проверка логики на объекте dto и class - PullRequest
0 голосов
/ 20 ноября 2018

Я унаследовал работу по ведению небольшой битвы.

Игра работает, но когда пользователь нажимает кнопку «Конец» в браузере, игра никогда не сохраняется в базе данных.

Этот метод вызывается после получения запроса «HttpPut» через API:

   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 голосов
/ 20 ноября 2018

Попробуйте это

  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;
    }

Проверьте, сохраняет ли игра.Это доказывает, что ваш ответ и GameService работают

Затем вы можете добавить некоторую логику, чтобы гарантировать, что она сохраняет только, например, если dto.IsActiveBattle имеет значение false.

Дело в том, что возможно dto.IsActiveBattle был измененtrue, когда var retval = base.UpdateGameModel (g, dto);был назван.

...