У меня есть приложение Java, которое загружает информацию (сущности) с нашего сервера.Я использую поток загрузки для загрузки данных.
Процесс загрузки выглядит следующим образом:
- Вход в систему - пользовательский объект загружается
- На основев пользовательском объекте загрузите список и отображение сущностей «Сообщество» в раскрывающемся списке
- на основе раскрывающегося списка «Сообщество», загрузите и покажите «Дерево организации» в JTree
- на основе выбора узла, загрузите сущности категории и отобразите в раскрывающемся списке
- На основе выбора категории, загрузите сущности подкатегории и отобразите в раскрывающемся списке
- На основе выбора подкатегории загрузите большой набор данных и сохраните его
Загрузка происходит в потоке, поэтому графический интерфейс не «зависает».Это также позволяет мне обновлять индикатор выполнения.
Мне нужна помощь в управлении этим процессом.Основная проблема заключается в том, что когда я загружаю данные сущности, мне нужно найти способ дождаться завершения потока, прежде чем пытаться получить сущность и перейти к следующему шагу в потоке приложения.
До сих пор я использовал модальный диалог для управления потоком.Я запускаю поток, открываю модальное и затем удаляю модальное, когда поток закончен.В качестве модального / потока используются Observer / Observable, поток выполняет изменение набора после его завершения и удаления из диалогового окна.Отображение модального режима эффективно останавливает поток приложения, поэтому оно может ждать окончания загрузки.
Я также попытался просто перенести весь рабочий процесс в Observers.Все соответствующие GUI в этом процессе являются наблюдателями.Каждый метод обновления ожидает завершения загрузки, а затем вызывает следующий фрагмент графического интерфейса, который выполняет загрузку самостоятельно.
До сих пор я обнаружил, что эти два метода создают код, за которым трудно следовать.Я хотел бы «централизовать» этот рабочий процесс, чтобы другие разработчики не вырывали свои волосы, пытаясь им следовать.
Мой вопрос: есть ли у вас какие-либо предложения / примеры, где рабочий процесс, такой как этотможно ли управлять способом, который создает код, за которым легко следовать?
Я знаю, что «легко» - относительный термин, и я знаю, что оба моих варианта уже работают, но я хотел бы получить некоторые идеи от других программистовпока у меня еще есть время его поменять.
Большое спасибо.