Middle
Zašto mnogi programeri odbacuju MVP arhitekturu?
sobes.tech АИ
Одговор од АИ
- Boilerplate. Mnogo koda za povezivanje na View i Presenter: interfejsi za View, implementacija na Presenter, upravlqne na životniot cikŭl.
- Teškoći pri testiranje na Presenter. Za testiranje na Presenter, često e potrebna mock na View, koja može biti složena i da ima zavisnosti.
- Problemi so očuvanje na sostojanie. Pri promena na konfiguracijata (npr. rotacija na ekranot), treba rucno da se čuva i da se vrati sostojanjeto na Presenter, što može biti zamorno.
- Loska skalabilnost. Kako se povećuva složenosta na ekranot, Presenter-ot može da postane teški i teško za održavanje.
- Nema direktna veza između View i podatocite. View-ot nema direkten pristap do podatocite, site zahtevki prolazat preko Presenter, što može da oteža jednostavni operacii.
Primer kod koji prikazuva boilerplate vo MVP:
// Interfejs na View
interface MyView {
fun showData(data: List<String>)
fun showError(message: String)
}
// Interfejs na Presenter
interface MyPresenter {
fun attachView(view: MyView)
fun detachView()
fun loadData()
}
// Implementacija na Presenter
class MyPresenterImpl(private val model: MyModel) : MyPresenter {
private var view: MyView? = null
override fun attachView(view: MyView) {
this.view = view
}
override fun detachView() {
view = null
}
override fun loadData() {
// Simulacija na load na podatoci
val data = model.getData()
view?.showData(data)
}
}
// Primer na koristenje vo Activity
class MyActivity : AppCompatActivity(), MyView {
private lateinit var presenter: MyPresenter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my)
presenter = MyPresenterImpl(MyModel())
presenter.attachView(this)
presenter.loadData()
}
override fun onDestroy() {
super.onDestroy()
presenter.detachView()
}
override fun showData(data: List<String>) {
// Ažuriranje na UI
}
override fun showError(message: String) {
// Prikaz na greska
}
}