По какому presentation паттерну создастся проект в Android Studio

Ответ

Чаще всего новый проект в Android Studio создаётся с использованием MVVM (Model-View-ViewModel). Это официально рекомендованный Google паттерн, особенно с использованием компонентов Jetpack:

  • Model – данные и бизнес-логика.
  • View – UI (Activity/Fragment).
  • ViewModel – посредник, хранящий UI-данные и обрабатывающий логику.

Пример структуры:

// Model
data class User(val name: String)

// ViewModel
class UserViewModel : ViewModel() {
    private val _user = MutableLiveData<User>()
    val user: LiveData<User> = _user

    fun loadUser() { _user.value = User("Alex") }
}

// View (Activity)
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        val viewModel = ViewModelProvider(this)[UserViewModel::class.java]
        viewModel.user.observe(this) { user -> 
            findViewById<TextView>(R.id.textView).text = user.name 
        }
    }
}

Также поддерживается Clean Architecture, но MVVM остаётся базовым шаблоном в новых проектах.

Ответ 18+ 🔞

Ну, вот смотри, как обычно бывает. Открываешь новенький проект в Android Studio, а там тебе сразу подсовывают этот MVVM (Model-View-ViewModel). Это типа как священный грааль от Гугла, ёпта. Все его рекомендуют, особенно с ихними этими Jetpack-компонентами. Вроде как и правда удобно, но иногда от этой архитектуры голова квадратная становится, я тебе честно говорю.

Короче, суть простая, как три копейки:

  • Model — это твои данные и всякая бизнес-логика, которая не должна знать, есть ли у неё вообще лицо.
  • View — это твои Activity или Fragment, то есть всё, что видит юзер. Его задача — показывать и тыкать. Никакой логики тут быть не должно, а то будет пиздопроебибна! Запомни это как «Отче наш».
  • ViewModel — а вот это хитрая жопа. Посредник. Он хранит данные для UI и крутит логику, чтобы View не превратилась в свалку. Главное — переживает повороты экрана, за что ему отдельное спасибо.

Вот тебе примерчик, чтобы не быть голословным. Смотри, как это выглядит в коде:

// Model — просто данные, тупая структура
data class User(val name: String)

// ViewModel — тут вся магия
class UserViewModel : ViewModel() {
    // Внутренний мутабельный LiveData, куда пишем
    private val _user = MutableLiveData<User>()
    // Наружный иммутабельный LiveData, откуда читает View
    val user: LiveData<User> = _user

    // Функция, которая якобы грузит юзера
    fun loadUser() { _user.value = User("Alex") }
}

// View (Activity) — тупая рожа, которая только показывает
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Достаём нашу ViewModel
        val viewModel = ViewModelProvider(this)[UserViewModel::class.java]

        // Подписываемся на данные. Пришло новое имя — отобразили.
        viewModel.user.observe(this) { user -> 
            findViewById<TextView>(R.id.textView).text = user.name 
        }
    }
}

Ну и конечно, есть ещё Clean Architecture для самых отчаянных перфекционистов, где слоёв, как в торте «Наполеон», овердохуища. Но в 99% новых проектов MVVM — это тот самый базовый шаблон, с которого всё начинается. Просто выучи его, как таблицу умножения, а то потом сам от себя охуеешь, когда начнёшь путаться в своих же потрохах.