Страницы

Поиск по вопросам

воскресенье, 7 июля 2019 г.

Как правильно использовать фрагменты?

Все вычисления, обращения к базам данных и прочие ресурсозатратные действия нужно проводить в классе фрагмента? или же правильнее все действия выполнять в классе активности к которой относится фрагмент, а в фрагмент лишь передавать данные для отображения?


Ответ

Чтобы ответить на ваш вопрос, необходимо сначала понять общую логику вашего приложения.
Рассмотрим сначала ситуацию, когда у вас есть только Activity и Fragment'ы в ней, без вспомогательных классов, что за классы опишу позднее.
Каждый фрагмент может находиться внутри Активити, и так же мы можем каждый фрагмент использовать в разных активити. Например, у нас есть фрагмент, который в себе содержит DatePicker для выбора времени. И этот фрагмент мы можем использовать, допустим в активити А и активити Б. Чтобы мы могли безболезненно переиспользовать фрагмент, нам необходимо, чтобы он не зависел от активити которая его вызывает. Т.е. весь код отвечающий за работу этого фрагмента должен находиться внутри него.
Другая ситуация, у вас есть два фрагмента и одна активити. В первом фрагменте происходит что-то, что понадобиться второму фрагменту. Тогда реализация следующая - первый фрагмент выполняет работу, которая не зависит от активити, потом отдаёт активити данные необходимые для второго фрагмента и она уже передаёт во второй. Второй так же старается быть максимально независимым от активити и первого фрагмента.
Какой вывод можно сделать? Тут действует принцип разделения ответственности. Вы должны четко определить какой класс чем занимается. В описанных мной случаях Активити является связующим звеном, а конкретные задачи выполняются в фрагментах. Идеальная ситуация - когда ваши фрагменты ничего не знают об активити
Теперь о вспомогательных классах -
а в фрагмент лишь передавать данные для отображения?
Это хорошая мысль, но чтобы её реализовать, вам необходимо взглянуть в сторону паттернов MVP (Model View Presenter) \ MVVM (Model View ViewModel). Эти паттерны как раз и отвечают на ваш вопрос. В них есть отдельные классы (Presenter & ViewModel), которые занимаются исключительно логикой , обращениями в базу и тд. А фрагменты выступают в роли View и отвечают только за отображение данных

Комментариев нет:

Отправить комментарий