Это хорошая практика реализации Parcelable на объекте базы данных Room? - PullRequest
1 голос
/ 09 мая 2019

Я совершенствую свои навыки разработки на Android и играю с компонентами архитектуры. Поэтому я создал класс сущности, используя аннотации Room для сохранения в базе данных, и реализовал Parcelable в классе сущности частично с целью помещения объекта сущности в объект Intent и передачи его между действиями / фрагментами. Я просто хочу знать, если это хорошая практика. Есть ли какие-либо недостатки в использовании таких подходов, как утечки в базе данных или недостатки безопасности? Просто любопытно.

1 Ответ

4 голосов
/ 09 мая 2019

Я просто хочу знать, является ли это хорошей практикой.

ИМХО, в современной разработке приложений для Android нет, по нескольким причинам, в том числе:

  • Шаблон репозитория : Текущий шаблон в архитектуре приложения Android состоит в том, чтобы изолировать хранилище данных и перенести проблемы в объект «репозиторий».Хранилище знает подробности того, откуда данные поступают и куда направляются (Комната, Область, Модернизация и т. Д.).Остальная часть приложения не знает и не заботится, так как остальная часть приложения просто общается с хранилищем.С помощью этого шаблона вы будете передавать идентификаторы между действиями и фрагментами, а хранилище будет передавать объекты модели на основе этих идентификаторов.

  • Скрыть детали реализации : Ваш пользовательский интерфейс должен работать с идеальным набором классов моделей, которые не привязаны к конкретным реализациям хранения или передачи данных.Таким образом, если вы решите изменить свою реализацию (например, с Room на Realm), ваши изменения останутся изолированными и не окажут большого влияния на пользовательский интерфейс.Если вы используете репозиторий, он будет отвечать за преобразование сущностей Room и ответов Retrofit в объекты стандартизированной модели, которые остальная часть приложения знает, как использовать.

  • Singleисточник правды : Как только вы начинаете передавать объекты с помощью Intent дополнений, вы делаете копии.Если одна часть вашего приложения захочет изменить этот объект модели ... как об этих изменениях узнает остальная часть приложения, содержащая другие копии данных?В идеале у вас есть хранилище с реагирующим API, где хранилище - это сторона, которая вносит изменения в данные.Затем он может уведомить другие заинтересованные стороны об изменениях данных, предоставляя обновленную версию объекта модели.

  • Ограничения памяти IPC : Каждый раз, когда выиспользуйте Intent с startActivity(), startActivityForResult(), setResult() и т. д., содержимое этого Intent передается в основной процесс ОС ... даже если запущенное действие находится в том же процессе, что и процесскод, который запрашивает, чтобы действие было начато.Существуют ограничения памяти для того, насколько большим может быть Intent (грубо говоря, 1 МБ или ниже).Передача полных объектов модели может нормально работать сейчас, но позже, если кто-то добавит поле Bitmap или что-то к модели, вы можете столкнуться с проблемами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...