Предпочтительные методы для передачи объектов, которые клиенты могут сделать недействительными - PullRequest
1 голос
/ 01 февраля 2012

Я принял технику, в которой я передаю существующие объекты в формы, чтобы они могли отображать содержимое объекта и позволять пользователю изменять его при необходимости. Форма не привязана к объекту, поэтому, когда приходит время действовать, форма подметает содержимое своих элементов управления и помещает их в объект. Затем объект проверяется и о любых проблемах сообщается пользователю. Если объект действителен, он может быть возвращен вызывающей стороне, чтобы вызывающая сторона могла обновить представление / список / и т. Д.

Пока все хорошо. Однако, если содержимое формы или ее отсутствие создает недопустимый объект, а пользователь не исправляет его, возможно, отменяя форму, есть вероятность, что форма передаст недопустимый объект вызывающей стороне. Это не хорошо.

По сути, я ищу элегантный и эффективный способ либо оставить объект как есть, либо откатиться, если пользователь отменяет форму / действие.

Я рассмотрел ряд методов, каждый из которых имеет много плюсов и минусов. Я заинтересован в рассмотрении некоторых других взглядов.

Ответы [ 3 ]

0 голосов
/ 01 февраля 2012

Вы можете сделать, например,

  • добавьте IsValid() метод к вашему объекту и, когда форма закроется, проверьте содержащий объект на действительность

  • добавляет некоторое свойство state к форме, которое становится (скажем, boolean) false, и когда форма закрывается, вы можете проверить состояние этой формы.

Просто примеры.

0 голосов
/ 01 февраля 2012

Раньше я решал эту проблему, делая мелкую копию объекта при передаче его в вашу форму.Затем, когда копия возвращается, вы проверяете ее.Если это подтвердится, вы просто перезапишите исходный объект с копией.

  private static void PassTheObj()
  {
     MethodThatAcceptsObj(realObject.Copy());  
  }

  private static void ValidateObj(customObject objCopy)
  {
     if (objCopy.IsValid()) realObject = objCopy;
  }
0 голосов
/ 01 февраля 2012

Моя методология всегда была:

Проверка всей ViewModel.Если это подтверждает, передайте изменения.Если он не проверяется:

  • Для записи в форме, которая является действительной, оставьте ее, как пользователь ввел ее
  • Для записи в форме, которая недействительна, еслион соответствует правильному формату (например, это поле даты рождения, но пользователь ввел дату с 1788 года), возвращает значение, но помечает его как недействительное
  • Для записи в форме, которая недействительна, если она нене соответствует правильному формату (например, это поле возраста, но пользователь ввел X), не возвращайте значения (оставьте это поле пустым) и отметьте его как недействительное.

Надеюсь, что это поможет некоторым

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...