Middle
Разкажете повече за патърна MVP (Model-View-Presenter).
sobes.tech AI
Отговор от AI
MVP разделя приложението на три взаимодействащи компонента:
- Model: Управлява данните на приложението и бизнес логиката. Не зависи от потребителския интерфейс.
- View: Показва данните на потребителя и обработва неговия вход. Тя е пасивна и не съдържа логика за вземане на решения.
- Presenter: Действа като посредник между Model и View. Получава данни от Model и ги форматира за View. Реагира на събития от View и актуализира Model. View се позовава на Presenter, а Presenter на View чрез интерфейс.
Предимства на MVP:
- Устойчивост на промени в UI: Логиката е в Presenter, който не зависи от конкретна реализация на View.
- Тестируемост: Presenter е лесен за тестване изолирано, без да се моква UI.
- Разделяне на отговорностите: Ясното разделение на роли между компонентите подобрява поддръжката на кода.
Пример:
// Интерфейс на View
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("Грешка при зареждане на данните")
}
}
}
// Model
class MainModel {
fun getData(): String? {
// Зареждане на данни
return "Примерни данни"
}
}
// Активност (Реализация на View)
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
}
}