Каков наилучший способ передачи данных между основным блоком (или основным диалоговым окном) и модальным диалоговым окном? - PullRequest
2 голосов
/ 01 ноября 2008

Мне нужен модальный диалог, чтобы собрать некоторый пользовательский ввод. Затем мне нужно, чтобы те же данные использовались приложением MainFrame.

Обычно мой модальный диалог имеет указатель на какой-нибудь DataType, способный хранить то, что мне нужно, и я передаю этот объект по ссылке из MainFrame, чтобы иметь возможность восстановить данные после закрытия модального диалога пользователь.

Это лучший способ передачи данных?

Это не правильно!

Ответы [ 4 ]

3 голосов
/ 01 ноября 2008

Поскольку вы передаете данные после того, как пользователь закрыл диалоговое окно (предположительно в DialogResult.OK), вы можете легко сделать это без ссылки на MainFrame.

Допустим, в вашем диалоге есть TextBox, называемый userNameTextBox, и кнопка, которая завершает диалог с результатом OK. Вы можете сделать userNameTextBox общедоступным (не рекомендуется) или добавить свойство для возврата текста.

public string UserName
{
    get { return userNameTextBox.Text; }
}

И чтобы получить это значение после окончания диалога, вы просто делаете:

Dialog dialog = new Dialog();
if (dialog.ShowDialog() == DialogResult.OK)
{
    string username = dialog.UserName;
}
1 голос
/ 01 ноября 2008

@ Предложение Самуила совершенно адекватно при сборе одного или двух значений от пользователя.

Если вы получаете много значений, то решение вашего вопроса тоже подойдет.

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

Единственный эффект развязки, который я мог видеть здесь, - это отсоединение мэйнфрейма от конкретной реализации, которая доставляет ему данные. Таким образом, вместо того, чтобы создавать экземпляр Dialog и вызывать Dialog.ShowModal для мэйнфрейма, внедрение зависимостей предоставило бы мэйнфрейму IDataYouNeedGetter (который мог бы быть тем же самым модальным диалогом), и в соответствующее время мэйнфрейм делал бы

myGetter.SetTransferObject(dataStructInstance)
myGetter.GoGetTheData()
// do stuff with dataStructInstance now that myGetter set it up.

НО, нет никакой причины добавлять слой косвенности, если вы уже не знаете о конкретной необходимости разъединения.

0 голосов
/ 01 ноября 2008

Самый лучший способ сделать это - упаковать данные в событие и отправить их на шину событий.

Это отделяет диалог от мэйнфрейма - и если вы правильно спроектируете событие, оно не ограничивается использованием диалога.

В зависимости от языка и среды эту систему событий можно легко и дешево внедрить. Я называю свою версию межобъектного общения на основе класса.

0 голосов
/ 01 ноября 2008

Обычно вы можете использовать один класс или другой тип данных для передачи данных. Таким образом, диалог используется для изменения свойств класса. Почему это не так?

[юмор] С мэйнфреймом я предполагаю, что вы не имеете в виду большие старые (хотя еще живые и здоровые) компьютеры. Иначе я думаю, что TCP / IP будет хорошим выбором. [/ Юмор]

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