Восстановление исходного значения поля после ошибки валидации
От: zelenprog  
Дата: 06.10.23 09:48
Оценка:
Добрый день!

Нужно выполнить следующие действия:

1) На форме отображаются некоторые данные (например реквизиты организации)
2) Пользователь вводит данные в поле формы и нажимает Enter
3) Введенные в поле данные (а также идентификатор поля) передаются в модуль Бизнес-логики
4) Бизнес-логика проверяет может ли это поле содержать введенные данные с учетом текущего "состояния" ("окружения").
Например, телефон организации должен содержать код страны, которая указана в адресе этой организации.
5) Если проверка удовлетворительная, то создается Бизнес-сущность и записывается в БД.
6) Если проверка ошибочная, то в поле должно быть восстановлено исходное значение.

// вариант 1
class MainForm {
  
  TTextField mTelefonTextField;
  
  private void OnButtonClicked() 
  {
      lBusinessLogic = new TBusinessLogic;
      lResult = lBusinessLogic.SaveTelefon(lOrganizationID, mTelefonTextField);

      if (lResult != OK)
         mTelefonTextField = ??? восстановить значение
  }
}

// вариант 2
class MainForm {
  
  TTextField mTelefonTextField;
  
  private void OnButtonClicked() 
  {
      try
      {
         // в конструкторе произойдет исключение, если валидация будет неуспешная
         lOrganizationTelefon = new TOrganizationTelefon (lOrganizationID, mTelefonTextField);
         
         lRepository = new TRepository();
         lRepository.Save(lOrganizationTelefon);
      }
      catch()
      {
         mTelefonTextField = ??? восстановить значение
      }
  }
}


Первый вопрос: какой вариант кода валидации правильный?

Второй вопрос: как восстановить исходное значение? откуда его получить?

По идее, мы дожны прочитать из БД то значение, которое должно появиться в поле после ошибочной валидации.
Так как именно в базе хранится "правильное" значение. Верно?
Но это ведь непроизводительно, каждый раз после такой "мелочи" дергать базу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.