Как реорганизовать класс, который содержит много внутренних классов слушателей? - PullRequest
3 голосов
/ 07 июня 2011

Я пишу приложение для Android, которое получает обновления местоположения и отправляет запросы в веб-службу.Приложение выполняет несколько действий и использует локальный Сервис в качестве контроллера.Проблема в том, что эта служба «контроллера» быстро превращается в анти-шаблон Blob / God.Я пытаюсь найти лучший способ рефракторинга кода.

Почти все функции являются асинхронными, так как http-клиент должен работать в отдельном потоке.Большинство вызовов метода передают слушатели, чтобы получить ответ от сервера.Обновления местоположения также получены через слушателя.Все эти слушатели в настоящее время реализованы как внутренние классы в моей локальной службе.Теперь у меня есть около 10 внутренних классов внутри моей локальной службы.Я не понимаю, как я могу переместить этих слушателей в отдельные классы, так как им нужен доступ к состоянию, хранящемуся в Сервисе.Я попытался реализовать гибридный класс синглтон / наблюдатель, который обрабатывает все состояния, получая обновления от каждого из слушателей, а затем передавая их любым зарегистрированным наблюдателям, но это также не является хорошим решением, поскольку у него есть все проблемы, связанные с глобальным состоянием итрудно следить за ходом программы из одного места в другое.После переписывания, рефакторинга и переписывания я теперь совершенно сбит с толку и не знаю, что делать.Любой совет?

1 Ответ

0 голосов
/ 07 июня 2011

Две мысли.1) Это явное раздувание кода обработки событий скрыто в MS Net IDE и, возможно, в Mac IDE путем свертывания обработчиков событий и предоставления значка для раскрытия раздела кода события.Так что я не вижу, что код обработки событий раздут, и это меня не беспокоит.С глаз долой, из сердца вон.

2) для Android 1.6+ можно выполнить рефакторинг для атрибутов XML

<Button android:text="@string/get_plain_text_button"
android:id="@+id/ButtonPlainText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick= "plainTextOnClickHandler">

, что соответствует методу :

public voidplainTextOnClickHandler(View v){
    editTextPlainText.setText("Plain Text Button Clicked");
}

JAL

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