Sobes.tech
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
    }
}