Middle
მეტი დეტალებით ისაუბრეთ MVP (Model-View-Presenter) ნიმუშზე.
sobes.tech AI
პასუხი AI-სგან
MVP მოდულური აპლიკაციას სამ კომპონენტად ყოფს:
- მოდელი: მართავს აპლიკაციის მონაცემებს, ბიზნეს-ლოგიკას. იგი არ არის დამოკიდებული მომხმარებლის ინტერფეისზე.
- ნახვა: აჩვენებს მონაცემებს მომხმარებელს და პროცესებს მისი შეყვანა. იგი პასიურია და არ შეიცავს გადაწყვეტილების მიღების ლოგიკას.
- პრეზენტერი: წარმოადგენს შუამავალს მოდელის და ნახვის შორის. იღებს მონაცემებს მოდელიდან და ფორმატირებს მათ ნახვისთვის. რეაგირებს ნახვის მოვლენებზე და განაახლებს მოდელს. ნახვა მიუთითებს პრეზენტერზე, ხოლო პრეზენტერი მიუთითებს ნახვას ინტერფეისის საშუალებით.
მოდულის უპირატესობები:
- UI ცვლილებებზე მდგრადობა: ლოგიკა მდებარეობს პრეზენტერში, რომელიც არ არის დამოკიდებული კონკრეტულ ნახვაზე.
- ტესტირების მარტივობა: პრეზენტერი მარტივია ტესტირება იზოლირებულად, UI-ის მოკირების საჭიროების გარეშე.
- პასუხისმგებლობის განაწილება: კომპონენტების მკაფიო განაწილება აუმჯობესებს კოდის შენარჩუნებადობას.
მაგალითი:
// ნახვის ინტერფეისი
interface MainView {
fun showData(data: String)
fun showError(message: String)
}
// პრეზენტერი
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("მონაცემების ჩატვირთვა ვერ მოხერხდა")
}
}
}
// მოდელი
class MainModel {
fun getData(): String? {
// მონაცემების ჩატვირთვა
return "საკანონმდებლო მონაცემები"
}
}
// აქტივობა (ნახვის განხორციელება)
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
}
}