Назад к вопросам
Middle
67
questionbank
Расскажи подробнее о паттерне MVP (Model-View-Presenter).
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
MVP разделяет приложение на три взаимодействующих компонента:
- Model: Управляет данными приложения, бизнес-логикой. Она не зависит от пользовательского интерфейса.
- View: Отображает данные пользователю и обрабатывает его ввод. Она пассивна и не содержит логики принятия решений.
- Presenter: Выступает посредником между Model и View. Получает данные от Model и форматирует их для View. Реагирует на события View и обновляет Model. View ссылается на Presenter, а Presenter ссылается на View через интерфейс.
Преимущества MVP:
- Устойчивость к изменениям UI: Логика находится в Presenter, который не зависит от конкретной реализации View.
- Тестируемость: Presenter легко тестировать в изоляции, без необходимости мокать UI.
- Разделение ответственности: Четкое разделение ролей между компонентами улучшает сопровождаемость кода.
Пример:
// View Interface
interface MainView {
fun showData(data: String)
fun showError(message: String)
}
// Presenter
class MainPresenter(private val view: MainView, private val model: MainModel) {
fun loadData() {
val data = model.getData()
if (data != null) {
view.showData(data)
} else {
view.showError("Failed to load data")
}
}
}
// Model
class MainModel {
fun getData(): String? {
// Загрузка данных
return "Sample Data"
}
}
// Activity (View Implementation)
class MainActivity : AppCompatActivity(), MainView {
private lateinit var presenter: MainPresenter
private lateinit var textView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textView = findViewById(R.id.textView)
val model = MainModel()
presenter = MainPresenter(this, model)
presenter.loadData()
}
override fun showData(data: String) {
textView.text = data
}
override fun showError(message: String) {
textView.text = message
}
}