- •Архітектура «Модель - Представлення - Контроллер» і Android
- •Мал. 2.5. Взаємодії mvc при отриманні введення від користувача
- •Переваги mvc
- •Оновлення рівня представлення
- •Оновлення рівня контроллера
- •Налаштування пристрою для розробки
- •Додавання значка
- •Додавання ресурсів в проект
- •Посилання на ресурси в xml
- •Контрольні запитання
Лаборторна робота №2
Тема: Модель-представлення-контроллер MVC.
Мета: Навчитися оновлювати рівні представлення додатка Android на базі архітектури
MVC.
Прилади і матеріали:
пакет Java Development Kit( JDK8);
Eclipse — інтегроване середовище розробки для Android;
Android Developer Tools ADT — плагін для Eclipse;
Android SDK
Мобільний телефон на ОС Android.
Хід роботи
У цій лабораторній роботі ми оновимо додаток GeoQuiz і включимо в нього додаткові питання.
Мал. 2.1. Більше питань!
Для цього в проект GeoQuiz буде доданий клас з ім'ям TrueFalse. Екземпляр цього класу інкапсулює одне питання з відповіддю «так/ні».
Потім ми створимо масив об'єктів TrueFalse, з яким працюватиме клас
QuizActivity.
Створення нового класу
На панелі Package Explorer клацніть правою кнопкою миші на пакеті com.bignerdranch.android.geoquiz і виберіть команду New - Class. Введіть ім'я класу TrueFalse, залиште суперклас за умовчанням java.lang.Object і клацніть на кнопці Finish.
Мал. 2.2. Створення класу TrueFalse
Додайте у файл TrueFalse.java два поля і конструктор :
Лістинг 2.1. Додавання класу TrueFalse
public class TrueFalse { private int mQuestion;
private boolean mTrueQuestion;
public TrueFalse(int question, boolean trueQuestion) { mQuestion = question;
mTrueQuestion = trueQuestion;
}
}
Чому поле mQuestion оголошене з типом int, а не String? У нім зберігатиметься ідентифікатор ресурсу(завжди int) строкового ресурсу з текстом питання. Змінна mTrueQuestion вказує, істинне або неправдиве твердження в питанні.
Для змінних необхідно визначити get — і set— методи. Вводити їх самостійно не треба — простіше наказати Eclipse згенерувати реалізації.
Генерування get і set- методів
Передусім слід настроїти Eclipse на розпізнавання префікса m в полях класів і використання префікса іs замість get для логічних змінних.
Відкрийте вікно налаштувань Eclipse(команда Windows - Preferences в системі Windows). У налаштуваннях Java виберіть категорію Code Style.
У таблиці Conventions for variable names: виберіть рядок Fields(мал. 2.3). Клацніть на кнопці Edit і введіть префікс m для полів. Потім додайте префікс s для статичних полів. (У проекті GeoQuiz префікс s не використовується, але він згодиться в майбутніх проектах.)
Простежте за тим, щоб прапорець Use 'is' prefix for getters that return boolean був встановлений. Клацніть на кнопці OK.
Мал. 2.3. Налаштування стилю оформлення коду Java
Навіщо ми задавали ці префікси? Якщо тепер наказати Eclipse згенерувати get- метод для mQuestion, середовище згенерує методи з іменами getQuestion() замість
getMQuestion() і isTrueQuestion() замість isMTrueQuestion().
Поверніться до файлу TrueFalse.java, клацніть правою кнопкою миші після конструктора і виберіть команду Source-Generate Getters And Setters... Клацніть на кнопці Select All, щоб згенерувати get - і set- метод для кожної змінної.
Модель
Контроллер
Представлення(макет)
Мал. 2.4. Зв'язки між об'єктами GeoQuiz
Клацніть на кнопці OK. Eclipse генерує код чотирьох методів.
Лістинг 2.2. Згенеровані get - і set- методи
Клас TrueFalse готовий. Незабаром ми внесемо зміни в QuizActivity для роботи з TrueFalse, але спершу подивимося, як фрагменти GeoQuiz працюватимуть разом.
Клас QuizActivity повинен створити масив об'єктів TrueFalse. В процесі роботи він взаємодіє з TextView і трьома віджетами Button для виведення питань і надання зворотного зв'язку на відповіді користувача.
Архітектура «Модель - Представлення - Контроллер» і Android
Ймовірно, ви помітили, що об'єкти на мал. 2.4 розділені на три області: «Модель», «Контроллер» і «Представлення». Додатки Android будуються на базі архітектури, що називається «Модель-представлення-контроллер», або скорочено MVC(Model - View - Controller). Згідно з канонами MVC, кожен об'єкт додатка має бути об'єктом моделі, об'єктом представлення або об'єктом контроллера.
Об'єкт моделі містить ці застосування і «бізнес-логіку». Класи моделі зазвичай проектуються для моделювання сутностей, з якими має справу додаток, — користувач, продукт в магазині, фотографія на сервері, питання «та ні» і т. д. Об'єкти моделі нічого не знають про призначений для користувача інтерфейс; їх єдиною метою є зберігання і управління даними.
У додатках Android класи моделей зазвичай створюються розробником для конкретного завдання. Усі об'єкти моделі у вашому застосуванні складають його
рівень моделі.
Рівень моделі GeoQuiz складається з класу TrueFalse.
Об'єкти представлень уміють відображати себе на екрані і реагувати на введення користувача — наприклад, торкання. Просте правило: якщо ви бачите щось на екрані — значить, це представлення.
Android надає широкий набір класів представлень, що настроюються. Розробник також може створювати власні класи представлень. Об'єкти представлення в додатку утворюють рівень представлення.
У GeoQuiz рівень представлення складається з віджетів, заповнених по вмісту файлу activity _ quiz.xml.
Об'єкти контроллерів зв'язують об'єкти представлення і моделі; вони містять «логіку додатка». Контроллери реагують на різні події
що ініціюються об'єктами представлень, і управляють потоками даних між об'єктами моделі і рівнем представлення.
У Android контроллер зазвичай представляється субкласом Activity, Fragment або Service.
Рівень контроллера GeoQuiz нині складається тільки з класу
QuizActivity.
Н
а
мал. 2.5 показана передача управління
між об'єктами у відповідь на призначену
для користувача подію — таке, як
натиснення кнопки. Зверніть увагу:
об'єкти моделі і представлень не
взаємодіють один з одним безпосередньо;
у будь-якій взаємодії беруть участь
«посередники» — контроллери, одержуючі
повідомлення від одних об'єктів і
передавальні інструкції іншим.
Мал. 2.5. Взаємодії mvc при отриманні введення від користувача
Переваги mvc
Додаток може обростати функціональністю до тих пір, поки не стане занадто складним для розуміння. Розділення коду на класи спрощує проектування і розуміння додатка в цілому; розробник мислить в контексті класів, а не окремих змінних і методів.
Аналогічним чином розділення класів на рівні моделі, представлення і контроллера спрощує проектування і розуміння додатка; ви можете мислити в контексті рівнів, а не окремих класів.
GeoQuiz не є складним застосуванням, але переваги розділення рівнів проявляються і тут. Незабаром ми оновимо рівень представлення GeoQuiz і додамо в нього кнопку Next. При цьому нам абсолютно не треба пам'ятати про тільки що створений клас TrueFalse.
MVC також спрощує повторне використання класів. Клас з обмеженими обов'язками краще підходить для повторного використання, ніж клас, який намагається займатися усім відразу.
Наприклад, клас моделі TrueFalse нічого не знає про віджетах, використовуваних для виведення питання «так/ні». Це спрощує використання TrueFalse в додатку для різних цілей. Наприклад, якщо потрібно буде вивести повний список усіх питань, ви можете використати той же об'єкт, який використовується для виведення усього одного питання.
