Задать вопрос
@Kren_vpravo
android developer

Правильная архитектура Android приложений?

Подскажите пожалуйста, где научиться писать расширяемый, поддерживаемый, и надежный код под андроид. Мне кажется должен быть универсальный подход, который позволит эффективно писать 90% приложений, но почему-то не вижу его в документации гугла(у эпла то такие гайдлайны есть!). Чтобы функционал был разбит на независимые модули, а модули разделены по задачам (модель, отображение, уровень получения данных из кеша и т.п.), все данные надо бы immutable, но сложности с хранением состояния.

Ищу:
- готовые большые опенсорс приложения с поддерживаемым и безопасном кодом (очень не хватает, с Rx - было бы отлично)
- курсы, книги по архитектуре приложений - но конкретно применительно к андроиду. Ясно, что вариантов 100500, но мне нужны лишь те несколько, которые эфффективно решают 99% типичных андроид проблем.

Типичные вопросы, на которые не хватает ответов:
- в каком классе отправлять сетевые запросы для отображения списка? И передать потом данные в правильную активити.
- где кешировать ответ - средствами retrofit/valley, в памяти или в модели ручками?
- что будет контроллером если подход MVC, и должна ли на практике activity только пробрасывать запросы от вью в правильный кастомный контроллер? Где хранить состояние о том, какие фрагменты сейчас отображены?
- Где правильно хранить константы? Например тег, по которому в интенте данные лежат. Когда классов много, уже с этими константами возникает путаница.
- Если модель - не синглтон - то когда, где и как она должна удаляться из памяти?

Про Фернандо знаю, очень полезно, но мало, на многие вопросы ответов нет.
  • Вопрос задан
  • 6562 просмотра
Подписаться 27 Оценить 13 комментариев
Пригласить эксперта
Ответы на вопрос 6
atetc
@atetc
Админ Android dev-s чата: https://goo.gl/8JKF1f
В вашем вопрос недостаточно данных для ответа.

Всегда будет вопрос: правильная архитектура для чего именно?

ИМХО нужно всегда держать в запасе (и поддерживать) пачку своих архитектурных проектов-шаблонов, осознавать плюсы/минусы того или иного подхода и применять в зависимости от особенностей проекта.
В большинстве случаев решение по архитектуре пляшет от конкретных задач проекта.

P.S. Кстати, если вы по отдельности тут опубликуете свои под-вопросы, вы с большей вероятностью получите менее абстрактные ответы.
Ответ написан
@vGrabko99
html, css, js, php, golang, mysql
расширяемый, поддерживаемый, и надежный код
Роберт Мартин - Чистый код
Ответ написан
Ну могу только посоветовать еще раз повнимательнее прочитать Фернандо Он там отвечает на все вопросы, которые Вы привели

Там же есть и ссылка на проект в котором, очень хорошо видно как использовать архитектуру Фернандо

UPD:
Добавлю еще пару ссылок:
https://medium.com/@dmilicic/a-detailed-guide-on-d...

С Хабра статья про VIPER под android с RX:
https://habrahabr.ru/company/rambler-co/blog/277003/
Ответ написан
Старайтесь придерживаться SOLID и ваш код будет модульным, расширяемым и тестируемым.
Так же будет отлично если Вы будете разбивать приложение на модули(слои). Например, если Вы оформите всю работу с сетевыми запросами в отдельный модуль (включающий работу допустим с Retrofit), и предоставите интерфейсы для взаимодействия с этим модулем, то в дальнейшем сможете легко протестировать его. А если ваш код поддается тестированию, то значит Ваш код будет легко расширяться. Старайтесь создавать слабосвязанную архитектуру приложения.
Ответ написан
Комментировать
eastywest
@eastywest
Backend developer
Dagger 2 + RxJava вам в помощь
Ответ написан
@Kren_vpravo Автор вопроса
android developer
Суммирую полезные ссылки:
Хорошее приложение для разбора - расписание googleio 2015 https://github.com/google/iosched. Полезно изучить в качестве примера.
Так же полезен пример архитектуры от гугла https://github.com/yigit/dev-summit-architecture-demo
И пример с бесплатного курса по тестированию https://github.com/googlecodelabs/android-testing
Примеры DI на Dagger2 https://github.com/prolificinteractive/u2020 и https://github.com/LiveTyping/u2020-mvp
Ответ написан
Ваш ответ на вопрос

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

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