Ответ
Чаще всего новый проект в 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 — это тот самый базовый шаблон, с которого всё начинается. Просто выучи его, как таблицу умножения, а то потом сам от себя охуеешь, когда начнёшь путаться в своих же потрохах.