СЕТЕВОЙ ВАРІАНТ «МОДЕЛЬ-ВІД-КОНТРОЛЛЕР» в Android додатку

&nbsp

Нам здається, що зручно представити другий з описаних вище принципів як мережевий варіант патерну «Модель-вид-контролер», де сам постачальник вмісту отримує дані з мережі, а потім закачує їх в звичайний патерн MVC, діючий в Android Ми розглянемо постачальник вмісту як модель мережевого стану – постачальник може виконувати запити на отримання даних із станом, наявними в локальній системі, або отримувати дані з мережі При застосуванні такого підходу код контролера і виду не повинен безпосередньо створювати мережні запити для доступу до даних додатка і для управління ними Замість цього вид і контролер вашої програми повинні використовувати API ContentResolver для того, щоб запитувати дані через постачальник вмісту І тільки постачальник вмісту повинен в асинхронному режимі завантажувати мережеві ресурси і зберігати результати в локальному кеші даних Крім того, постачальник вмісту завжди повинен швидко реагувати на запит, з самого початку уникаючи етапу мережевий активації, яка може бути потрібна для виконання запиту з використанням будь-якої інформації, що вже перебуває в локальній базі даних При виконанні запиту за таким принципом гарантується, що потік користувальницького інтерфейсу буде заблокована не довше, ніж це необхідно, і що користувальницький інтерфейс повинен відобразити ті чи інші дані як можна швидше Таким чином, збільшується швидкість реагування додатки і користувачеві стає набагато приємніше працювати з таким інтерфейсом Розглянемо, в якій послідовності постачальник вмісту запитує дані

1 Постачальник вмісту виконує зіставлення вхідного URI і запрошувати вміст локальної бази даних на предмет елементів, які до цього збіглися з даними запиту

2 Наш постачальник вмісту завжди намагається отримати найбільш актуальний стан для запиту і після цього породжує асинхронний REST-запит для завантаження вмісту з мережі Це поведінка можна зробити конфігурованим на базі запиту

3 Постачальник вмісту повертає клієнту курсор з вихідного локального запиту

4 Асинхронний завантажувальний потік повинен вирішити, чи необхідно оновити дані, що знаходяться в кеші постачальника вмісту Якщо така необхідність є, то постачальник вмісту завантажує дані з мережі і виробляє їх синтаксичний розбір

5 Коли вміст приходить з мережі, постачальник вмісту безпосередньо вставляє кожен новий фрагмент даних у базу даних, а потім повідомляє клієнтів URI про прихід нової інформації Оскільки сама операція вставки вже відбувається в рамках постачальника вмісту, не потрібно викликати ContentResolver іnsert Клієнти, що містять існуючі курсори (дані в яких застаріли), можуть викликати Cursor requery для оновлення своїх даних

У результаті такої послідовності відбувається оновлення і виду і контролера, які отримують нові дані з мережі, але тільки постачальник вмісту створює мережевий запит Запит на отримання ресурсів, які зараз відсутні в постачальнику вмісту, ми розцінюємо як запит на отримання цих ресурсів з мережі У такому випадку мережевий запит, що завантажує дані в кеш, можна вважати побічним продуктом запиту активності до постачальника

На рис 131 проілюстровані операції, які у постачальника вмісту при виконанні цієї послідовності

Рис 131 Мережевий постачальник вмісту, кешуючий контент з ініціативи клієнта

З кожним запитом в цій послідовності використовується єдиний обєкт Cursor, створюваний постачальником вмісту, а потім повертається увазі Лише від постачальника вмісту потрібно повідомляти користувальницький інтерфейс при зміні даних Вид і контролер не зобовязані збирати дані і, звичайно, не повинні оновлювати модель Коли дані доступні, постачальник вмісту повідомляє курсор про те, що можна робити запит Роль управління даними цілком укладена в постачальнику вмісту, завдяки цьому спрощується код виду і контролера Клієнт постачальника вмісту запитує дані і швидко отримує курсор коли прибувають дані з мережі, курсор про це повідомляється Необхідно ще раз відзначити, що робота механізму оповіщення вимагає, щоб обєкт Cursor і база були відкритими весь час, поки клієнт використовує їх Закриті курсори і бази даних призводять до того, що в клієнтських видах не відображається жодних результатів У такій ситуації складно зрозуміти, чому порожній компонент (наприклад, список) – тому, що курсор був помилково закритий, або тому, що запит дійсно не дав результатів

Джерело: Android Програмування на Java для нового покоління мобільних пристроїв

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*