2008-10-24 4 views
2

У меня есть приложение WinForms с текстовым полем ввода, кнопкой и многострочным текстовым полем вывода. Корневой путь вводится в текстовое поле. Кнопка click вызывает функцию для рекурсивной проверки всех подкаталогов для правильной проверки правильности именования каталогов. Результаты выводятся в многострочном текстовом поле.Должна ли рекурсия пути встречаться на уровне класса или презентации?

Если рекурсивная работа выполняется в отдельном классе, у меня есть два варианта:

  1. уследить ненадлежащие каталоги в свойстве класса (например, ArrayList), возвращают ArrayList, когда сделано, и обновление выводить текстовое поле со всеми результатами.

  2. Пропустите в ByRef текстовое поле вывода и обновите/обновите его для каждого неправильного каталога. Несмотря на то, что 1 & 2 являются однопоточными, с 2, я бы по крайней мере обновил результаты в каждом каталоге.

Если рекурсивная работа выполняется на уровне презентации, а проверка выполняется в отдельном классе, я могу многопоточно.

Что такое более чистый способ?

ответ

2

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

Если вы собираетесь выполнять работу в отдельном классе, это выглядит так же просто, как передать содержимое TextBox в виде строки и вернуть результаты в виде строки или набора строк (массив или List<string> или тому подобное). Это лучше, чем передача в TextBox, если когда-нибудь вы решите использовать другой тип управления для хранения этой информации.

2

Я бы предложил что-то близкое к варианту 1. У меня бы был метод, который берет корневой каталог как вход и возвращает список каталогов, которые являются «плохими». Также я бы назвал этот метод фоновым потоком, чтобы не повесить пользовательский интерфейс во время выполнения операции. Добавьте индикатор выполнения или какой-либо индикатор ожидания, чтобы пользователь знал, что операция продолжается.

Передача текстового поля в метод не позволит вам повторно использовать этот метод для чего-либо еще. В интересах повторного использования кода (если это важно для вас), я считаю, что чистить просто нужно, чтобы метод возвращал список и позволял методу обратного вызова выяснить, как отображать данные.

0

[не уверен, если это место для наблюдения к первоначальному вопросу]

так, то можно сказать, что рекурсивная функция бизнес-слой не будет иметь возможность обновить контроль уровня представления на каждом рекурсивная итерация?

Смежные вопросы