@foonfyrick

Правильно ли реализован MVP?

Не совсем понимаю, правильно ли я все делаю, и при переписывании приложения, не мог разобраться где Thread писать...
Я прочитал, что в модель подключается куда-то, получает оттуда данные, что-то с ними делает, то есть модель имеет методы: получить данные, обработать данные, отдать данные.
Вью реагирует на события на экране показывая сообщения.
Презентер реагирует на вызываемые методы во вью, забирая данные из вью на обработку в модель и отдавая уже обработанные моделью данные.

Попытавшись реализовать что-то подобное, вот такая картина у меня вышла:
VIEW
class MainActivity : AppCompatActivity(),TIView {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val tpresenter=Presenter(this)
        tpresenter.giveResult()
    }
    override fun showResult(message: String) {
        runOnUiThread {
            tvText.setText(message)
        }
    }
}

PRESENTER
class Presenter(val tiView: TIView) {
    val tmodel=TModel()
    fun giveResult(){
        Thread{
            tiView.showResult(tmodel.getTitle())
        }.start()
    }
}

MODEL
class TModel {
    fun getTitle():String{
        val document= Jsoup.connect("example").get()
        return document.title()
    }
}
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
@Dmtm
Android
что произойдет с презентером при повороте экрана?
что произойдет с потоком который хочет обратиться к уничтоженному View?

есть два варианта - наделать презентеров-синглтонов в Application, тогда они переживут повороты
или, более правильный - считать долгие операции частью модели и тогда пусть презентер создается каждый раз и просто подписывается на изменения в модели и запускает асинхронные методы где-то там, не у себя, презентер - это просто логика, вынесенная из активности
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы