Добрый день!
Нужно выполнить следующие действия:
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 = ??? восстановить значение
}
}
}
Первый вопрос: какой вариант кода валидации правильный?
Второй вопрос: как восстановить исходное значение? откуда его получить?
По идее, мы дожны прочитать из БД то значение, которое должно появиться в поле после ошибочной валидации.
Так как именно в базе хранится "правильное" значение. Верно?
Но это ведь непроизводительно, каждый раз после такой "мелочи" дергать базу.