Почему не стоит писать код в одной Activity

Ответ

Разделение кода на отдельные компоненты (Activity, Fragment, ViewModel) улучшает поддерживаемость и тестируемость. Одна Activity со всей логикой приводит к:

  1. God Object – Activity становится слишком сложной, нарушая принцип единственной ответственности.
  2. Сложность тестирования – Логика, UI и навигация перемешаны, сложно изолировать части для unit-тестов.
  3. Проблемы с жизненным циклом – Большой объем кода усложняет обработку поворотов экрана, восстановления состояния.

Пример плохой практики:

class MainActivity : AppCompatActivity() {
    // Логика, UI, работа с API, БД – всё в одном месте
    override fun onCreate() {
        // 500+ строк кода
    }
}

Лучше разделять на:

  • Activity/Fragment – только навигация и UI.
  • ViewModel – бизнес-логика.
  • Repository – работа с данными.

Ответ 18+ 🔞

Ну ты посмотри на эту дичь, ебать мои старые костыли! Вот сидит чувак и пишет всю свою жизнь в одну Activity. Получается такая пиздопроебибна, что страшно открывать. Это ж классический God Object, ёпта! Как будто один мужик пытается и дом построить, и обои поклеить, и ужин приготовить, и ещё детей уложить — в итоге нихуя не получается, только волнение ебать.

Представь себе этот код:

class MainActivity : AppCompatActivity() {
    // Тут у него и логика, и UI, и запросы в сеть, и с базой данных танцы с бубном – всё в одной куче, блядь
    override fun onCreate() {
        // А тут, сука, 500+ строк, которые не влезают на экран
    }
}

Чувак, ты веришь, что это можно поддерживать? Доверия ебать ноль. Попробуй это протестировать — это ж надо всю эту махину запускать, как будто ты локомотив из говна и палок собираешь. Сложность тестирования пиздец! Хочешь проверить одну маленькую логику оплаты, а тебе приходится весь интерфейс тащить, жизненные циклы эмулировать... Терпения ноль ебать.

А уж про проблемы с жизненным циклом я молчу. Повернул телефон — и всё, приложение накрылось медным тазом, потому что состояние потерялось где-то между строчкой 150 и 200 в этом onCreate. Удивление пиздец!

Так как же надо, спросишь ты? А надо, блядь, разделять и властвовать, как умные люди учат.

  • Activity/Fragment — пусть эти ребята занимаются только тем, что показывают кнопочки и реагируют на тапы. Их дело — навигация и UI, и всё. Не лезь туда с бизнес-логикой, чувак.
  • ViewModel — вот сюда всю свою мозговую деятельность и переноси. Проверка данных, подготовка состояния для экрана, обработка действий пользователя. Это ядро, его можно отдельно потестировать, не дергая весь интерфейс.
  • Repository — а это уже общага для данных. Пусть ходит в сеть, лезет в базу, кэширует что надо. Activity даже не должна знать, откуда данные берутся — с сервера или из локальной БД.

Получается как конструктор: каждый модуль делает своё дело, их легко менять и тестировать по отдельности. А не эта манда с ушами, где всё склеено в один ком. Э бошка думай! Сделаешь по-человечески — и жить станет проще, и коллеги по команде тебя полупидором обзывать не будут.