2013-02-22 4 views
2

У меня есть класс (активность Android), который обрабатывает запуск моего приложения. Приложение имеет довольно сложные правила запуска. Сейчас это похоже на кучу спагетти, и я ищу стратегии для его рефакторинга.Как реорганизовать процедурный код запуска?

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

Шагов:

  1. Проверить наличие ошибок на последнем выход и смыв локального кэша, если файл необходимая
  2. Настройки загрузки
  3. Параметры анализа и сохранение настроек в локальном собственном формате
  4. Используя значения в настройках, сделайте кучу «домашнего хранения»
  5. Используя значение в настройках, загрузите компонент данных ядра A
  6. Анализировать компонент А и загрузить локальный кэш

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

Существует ли стратегия или структура, которая может быть использована для разбивки процедурного кода запуска?

+0

Вы пытались извлечь материал в класс и вводить этот класс, используя что-то вроде Roboguice? – smk

ответ

0

Без каких-либо подробностей единственное предложение, о котором я могу думать, состоит в том, чтобы сгруппировать различные шаги по хорошо структурированным функциям, которые делают только одно и только одно.

Ваши 6 шагов выглядят как хорошее начало для 6 функций, которые должна выполнять функция init. Если # 2 был синхронным (я сомневаюсь), я бы объединил # 2, # 3 в функцию getSettings.

2

Хммм. Основываясь на ваших шагах, я вижу различные различные проблемы:

  1. Чтение и сохранение настроек.
  2. Загрузка настроек и компонентов (не уверен, что такое «компонент» здесь) с сервера.
  3. Чтение и создание компонентов.
  4. Очистить и прочитать кеш.
  5. Уборка номера (не совсем уверен, что это все влечет за собой).
  6. Обновления пользовательского интерфейса (не совсем уверен, что это требует).

Вы можете попробовать раскалывается код на различные объекты вдоль линий выше, например:

  1. SettingsReader
  2. ServerCommunicationManager (?)
  3. ComponentReader
  4. Cache

Не уверен, что 5 и 6, так как я не так много, чтобы идти туда.

Что касается фреймворков, то есть такие, как ранее упомянутый Roboguice, которые могут помочь в инъекции зависимостей. Это может пригодиться, или, может быть, проще сделать это вручную. Я думаю, что, прежде чем рассматривать инъекцию зависимостей, вам нужно распутать код. Все эти рамки внедрения зависимостей делают это для инициализации ваших объектов для вас - вы должны убедиться, что объекты имеют смысл в первую очередь.

+0

Спасибо за вдумчивый ответ. Наверное, мне интересно узнать, есть ли стратегия обернуть процедурные правила и превратить их в объекты? –

+0

Несомненно. Я бы сделал это, чтобы посмотреть на типы вещей, с которыми имеют дело процедуры. Например, вы указали кучу вещей в форме «глагол существительное» («очистить кеш», «загрузить настройки» и т. Д.). Каждый из ваших [существительных] (http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html) - это класс: следовательно, кэш, настройки и т. Д. Иногда у вас есть применить слой абстракции и объединить функциональные возможности - например, вы можете не захотеть, чтобы ваши настройки напрямую загружались (или, может быть, вы). Возможно, есть общий код, который обрабатывает всю загрузку. –