Должна ли рекурсия пути происходить на уровне класса или представления? - PullRequest
2 голосов
/ 24 октября 2008

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

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

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

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

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

Какой путь чище?

Ответы [ 3 ]

2 голосов
/ 24 октября 2008

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

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

2 голосов
/ 24 октября 2008

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

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

0 голосов
/ 24 октября 2008

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

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

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