Архитектура приложения ирк-клиент для андроид?

Доброго времени суток.

Я решил написать в первый раз в своей жизни приложения для android – irc клиент.

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

Прочитав статью, я понял, что в приложениях под андроид используется паттерн mvvm. В качестве видов используются layout-ы, в качестве ViewModel используются наследники класса Activity, а в качестве моделей – наследники классов ContentProvider и Service.

Немного поразмыслив, я пришёл к тому, что в приложение будут следующие layout: главное окно, окно настроек (там будут конкретные пункты настроек, например, основные настройки, настройки текста и т.д.), окно каналов (вероятно, все каналы и приватные разговоры будут реализованы в одном окне с помощью tab).

Как я понимаю, под каждый из этих layout нужно создать ViewModel и модель?

С другой стороны, подумав, я понял, что мне нужны, как минимум, следующие классы для полноценной работы приложения:

1) Класс Irc, который будет реализовывать основные операции: коннект на сервер, отправка сообщения, прием сообщения, авторизация и т.д. Кстати, вроде бы все операции с сетью нужно выносить в отдельный поток?

2) Класс StringParser, который отвечает за парсинг строк, полученных от сервера или клиента. Класс определяет, что нужно сделать. Например, если пришла команда от сервера 450 – показать человеку список, или, например, если человек написал в чат /msg NICKNAME msg, то нужно открыть окно личной беседы NICKNAME и отправить msg. На вход главного метода в этом классе поступает строка, а на выходе ожидается действие, которое нужно где-то совершить, и какой-то массив информации.

Не очень понятно, как представить эту информацию (действие и информацию). Можно, конечно же, просто создать какой-нибудь массив, но это вроде бы не лучший вариант.

3) Класс Сommands, который, наверное, должен запустить новый поток (класс Irc), который будет работать с сетью. Далее этот класс, наверное, будет получать данные от клиента и сервера, отправлять их классу StringParser и вызывать те команды, которые нужно.

4) Вроде бы нужны классы, которые будут реализовывать такие действия, как редактирование настроек, отображение списка ников и т.д. Однако я думаю, что все эти классы – это типичные представители Модели в паттерне MVVM.



Итак, это было предисловие. Что вам не нравится в том, что я сказал? Как исправить, что делать?

Вопросы:

1) Как пристроить классы Irc, StringParser, Commands в паттерн MVVP?

2) Если классы Irc, StringParser, Commands – это хелперы, то какой жизненный цикл приложения? Человек заходит в программу, грузится основное окно, и, я думаю, создается объект класса Commands. Он, в свою очередь, создает объект класса Irc, который должен работать в новом потоке. Что дальше? Все действия пользователя в моделях перенаправлять на объект класса Commands?
  • Вопрос задан
  • 2996 просмотров
Пригласить эксперта
Ответы на вопрос 2
Spades
@Spades
В Вашем случае, укладывается все в MVVM достаточно просто. Irc, StringParser и Commands — классы, лежащие в модели, при этом StringParser и Commands — по-сути синглтоны. И да, получается основной класс VM — Commands, который обрабатывает взаимодействие с пользователем.
Ответ написан
@Hixon10 Автор вопроса
А сколько вообще моделей создавать? Столько же, сколько layout? Или создать две модели (наследники класса ContentProvider) для классов Irc и StringParser? Или вообще одну модель (наследник класса ContentProvider), в которую вложить классы Irc и StringParser?
А класс Commands — это что? Это вроде бы ViewModel, то есть, Activity?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы