- архітектура MVC
- Веб-служби RESTful
- Приклад бізнес-моделі
- послідовність процесів
- Крок 1. Сформуйте рівень доступу до даних (модель)
- перелік корів
- Крок 3. Створіть рівень представлення (подання)
- висновок
- Ресурси для скачування
Розробляйте додатки для Android за допомогою веб-служб RESTful і архітектури MVC
Не секрет, що розробляти програми в IBM Bluemix ™ дуже просто. Сьогодні корпоративні розробники хочуть розробляти мобільні додатки в стилі Model-View-Controller (MVC) за допомогою Bluemix. У цьому керівництві розглянуто простий приклад, який демонструє проектування і розробку програми в Bluemix з використанням архітектури в стилі MVC. Перш ніж почати роботу над додатком, розглянемо ряд основ.
архітектура MVC
MVC - найбільш популярний і потужний шаблон архітектури для розробки призначених для користувача інтерфейсів. Шаблон архітектури MVC являє собою спосіб розділити додаток на три частини: модель, уявлення і контролер. Подання управляє графічним і текстовим призначеним для користувача введенням. Контролер інтерпретує дані, введені користувачем, і передає необхідні команди моделі або поданням. Модель керує поведінкою програми та його даними, а також відповідає на інструкції про зміну стану (як правило, передаються контролером). У цьому керівництві ми використовуємо шаблон архітектури MVC для створення мобільного застосування.
Веб-служби RESTful
Веб-служби RESTful - це набір API, відповідних архітектурним обмеженням Representational State Transfer (REST). Вони не вимагають від клієнта будь-яких знань про структуру API. Браузер заздалегідь не має ніякої інформації про те, де і які метадані потрібно передати. Для успішного виклику API сервер передає клієнтові всю необхідну інформацію, зокрема, URI і обов'язкові поля. На рівні служб нашого застосування ми використовуємо веб-служби RESTful.
Приклад бізнес-моделі
Bluemix Dairy Production Center - дослідний центр, який надає виробникам молока необхідні знання та технології для оптимізації виробництва. Dairy Production Center виконує аналіз і тестування корів і передає виробникам молока результати аналізу і пропозиції, що стосуються розкладу доїння і санітарно-епідеміологічного нагляду. Під час аналізу Dairy Production Center прагне надати виробникам молока механізм перегляду інформації про корів, розкладі доїння і захворюваннях. Виробники молока отримають можливість відправляти і отримувати новини від Dairy Production Center.
За допомогою нашого простого мобільного додатка виробники молока зможуть переглядати важливу інформацію з Dairy Production Center.
При проектуванні програми використовується архітектура в стилі MVC.
послідовність процесів
- Мобільний додаток Dairy Production Center для Android, що діє як компонент уявлення, робить запит від служби RESTful до модуля контролера, розгорнутому в середовищі виконання Bluemix WebSphere Liberty Runtime .
- На основі даних, введених в мобільний додаток, модуль контролера здійснює виклик відповідного об'єкта доступу до даних, який повертає дані контролеру.
- Після отримання відповіді від об'єкта доступу до даних (моделі), контролер передає відповідь мобільному додатку, яке відображає дані користувачеві в зручному для нього вигляді.
Компоненти MVC такі:
Рівень доступу до даних (модель)
Діє як інтерфейс, що надає доступ до бази даних (або іншому сховища). У нашому прикладі додатка цей рівень використовується як інтерфейс для взаємодії з базою даних. Рівень Data Access Object (DAO) використовується для відділення низькорівневих викликів API і дій від високорівневих бізнес-служб. У наступному списку вказані методи, реалізовані в DAO для отримання даних з бази. Рівень служб (контролер) Забезпечує GET, PUT і POST-виклики служб RESTful за допомогою рівня доступу до даних. Залежно від виклику, запитаного рівнем уявлення (тобто поданням, з веб, мобільного додатка або іншим способом), контролер звертається до рівня доступу до даних. У нашому прикладі додаток здійснює публікацію викликів служб RESTful за допомогою платформи Apache Wink, застосовуваної для реалізації і використання веб-служб REST на цьому рівні. Серверний модуль Wink є повну реалізацію специфікації JAX-RS v1.0.
- https: // <app-route> / rest / dairyproductioncenter / producer / {prodid} / cows
- https: // <app-route> / rest / dairyproductioncenter / producer / {prodid} / cows / {cowid} / herds
- https: // <app-route> / rest / dairyproductioncenter / news
- https: // <app-route> / rest / dairyproductioncenter / verifylogin
- https: // <app-route> / rest / dairyproductioncenter / producer / postnews
може являти собою будь-який інтерфейс, який взаємодіє з рівнем служб. Ви можете використовувати веб-інтерфейс або мобільний інтерфейс для виклику служб або API. Мобільний додаток для Android діє як компонент представлення даних користувачеві.
Наше мобільний додаток Dairy Production Center взаємодіє з викликами Dairy Production Center RESTful API в Bluemix. Додаток публікує API, які можуть бути використані будь-яким зовнішнім клієнтом по протоколу HTTP. Виробникам молока буде доступно додаток з можливістю входу користувачів:
Переглядайте перелік корів і стад, публікуйте новини в Dairy Production Center.
Відкрийте програму отримайте код
- Обліковий запис Bluemix .
- Базові знання Java ™ та Android Development ToolKit (ADT).
- Базові знання DB2® (або будь-який інший СУБД) і JSON.
- Знання серверного середовища виконання JAX-RS 1.1, створеної на основі Apache Wink 1.1, Object Model або Streaming Model API для JSON Processing.
Крок 1. Сформуйте рівень доступу до даних (модель)
Щоб сформувати рівень доступу до даних, створіть базу даних, схему, таблиці, взаємозв'язку, дані і об'єкти для доступу до даних. Для цього виконайте такі дії:
- Увійдіть в Bluemix .
- На зведеної панелі в меню Services (Служби) натисніть ADD A SERVICE (ДОДАТИ СЛУЖБУ). додайте службу SQLDB Database з розділу Data Management (Управління даними).
- Натисніть значок на зведеної панелі, щоб відкрити сторінку Launch (Запуск) для перегляду консолі адміністрування SQLDB.
- Виберіть пункт Manage (Управління)> Work with database objects (Робота з об'єктами бази даних) з консолі SQLDB / DB2 Service Management Console в Bluemix.
- У верхній лівій частині консолі виберіть Database Viewer (Засіб перегляду бази даних)> Schemas (Схеми). Натисніть RunDDL.
- Виконайте DDL, що містяться в базі коду DevOps в каталозі bluemixdairyproductioncenter-ddl.
- Коли DDL будуть успішно виконані, перевірте правильність таблиць і стовпців, клацнувши на коректні схеми, таблиці, стовпці і дані.
Тепер розглянемо код, необхідний для створення рівня доступу до даних.
- Імпорт вихідний код зі служби DevOps в Eclipse.
- Основні об'єкти для доступу до даних, що використовуються в таких межах:
- DairyProductionCenterDBConnection, який здійснює підключення до бази даних
- DairyProductionCenteDAOImpl, який здійснює перерахування всіх корів для виробника за запитом з рівня служб
Класи, що містяться в пакеті DAO:
- Для взаємодії з базою даних вам буде потрібно встановити з'єднання JDBC зі службою Bluemix SQLDB Service. Для підключення до послуги SQLDB в Bluemix використовуйте код, представлений нижче. public Connection getConnnection () throws SQLException {Connection con = null; try {DB2SimpleDataSource dataSource = new DB2SimpleDataSource (); dataSource.setServerName (databaseHost); dataSource.setPortNumber (port); dataSource.setDatabaseName (databaseName); dataSource.setUser (user); dataSource.setPassword (password); dataSource.setDriverType (4); con = dataSource.getConnection (); con.setAutoCommit (false); } Catch (SQLException e) {throw new SQLException (); } Return con; }
Наступне завдання - отримати перелік всіх корів з таблиці бази даних (DP_COWS) за допомогою DAO.
Представлений код показує, як отримати перелік корів з бази даних. Щоб отримати значення з бази даних, виконайте цей метод:
public ArrayList <Cow> getAllCows (String prodid) {ArrayList <Cow> cwArraylist = new ArrayList <Cow> (); System.out.println ( "Inside Get All Cows" + prodid); Connection conn = null; try {conn = new DairyProductionCenterDBConnection (). getConnnection (); String tableName = ""; String sqlStatement = ""; String schemaName = "IBM_ECOD_DAIRYPRODUCTIONCENTER"; tableName = schemaName + "." + "DP_COWS"; Statement stmt = conn.createStatement (); sqlStatement = "SELECT * FROM" + tableName + "WHERE PRODUCER_ID =" + " '" + prodid + "'"; ResultSet rs = stmt.executeQuery (sqlStatement); while (rs.next ()) {Cow cw = new Cow (rs.getString ( "COW_ID"), rs.getString ( "RFTAG_ID"), rs.getString ( "HERD_ID"), rs.getString ( "REPORT_COMMENTS") , rs.getString ( "COW_NAME")); cwArraylist.add (cw); } Rs.close (); stmt.close (); } Catch (SQLException e) {return null; } Finally {try {conn.close (); } Catch (Exception e) {/ * ignored * /}} return cwArraylist; }
Вам повинен відобразитися перелік корів в таблиці бази даних (DP_COWS):
перелік корів
Крок 2. Створіть рівень служб (контролер)
Створіть рівень служб, який здійснює виклик рівня служб даних (моделі) і публікує служби RESTful для зовнішніх клієнтів. В цьому розділі основна увага приділена створенню та публікації служби CowList REST Service. Рівень доступу до даних для цієї служби ми вже створили. Служба REST отримає перелік корів за допомогою звернення до рівня доступу до даних (як зазначено в структурі пакета) і зазначеним нижче класів.
Цей рівень реалізується за допомогою платформи служб Apache Wink REST і інструментів Java JSON Builder. Пакет і класи для реалізації викликів служби RESTful:
- Використовуйте наведений нижче код для звернень до рівня доступу до даних і публікації служби RESTful (/ dairyproductioncenterapi / producer / {prodid} / cows) для доступу до даних в форматі JSON. Цей код отримує перелік корів для виробника за допомогою виклику служби RESTful. @Path ( "/ dairyproductioncenterapi") public class DairyProductionCenterRestAPIs {DairyProductionCenterDAO dpcDao = new DairyProductionCenterDAOImpl (); @Context HttpServletRequest request; @GET @Path ( "/ producer / {prodid} / cows") @Produces (MediaType.APPLICATION_JSON) public Response getCows (@PathParam ( "prodid") String prodid) {System.out.println ( "Getting All Cows for- --- "+ prodid); ArrayList <Cow> cw = dpcDao.getAllCows (prodid); if (cw.size ()> 0) {return Response.ok (JsonBuilderUtils.constructCowJSON (cw)). build (); } Else {return Response.ok (JsonBuilderUtils.constructCowJSON (cw)). Build (); }}
- Після реалізації служб і рівня доступу до даних створіть файл WAR і виконайте розгортання WebSphere Liberty Runtime in Bluemix.
- Виконайте доступ до служби RESTful CowList через клієнт REST. На ілюстрації нижче представлений Розширений клієнт REST з магазину додатків Google chrome. Ви також можете використовувати Postman - REST Client з магазину додатків Google chrome для інформування про реєстрацію викликів служби RESTful і їх результатів.
Порівняйте відповідь JSON з даними в базі в розділі перелік корів .
https://bluemixdairyproductioncenter.mybluemix.net/rest/dairyproductioncenterapi/producer/PROD1/cows
Крок 3. Створіть рівень представлення (подання)
Просте додаток Android на рівні уявлення призначене для перегляду переліку корів за допомогою служб і рівнів доступу до даних, створених на попередніх етапах. Для створення мобільного застосування використовуйте Android Development ToolKit (ADT). Для виклику служб REST використовуйте клієнтську платформу Apache HTTP.
- Імпорт вихідний код (bluemixdairyproductioncenter-android) з DevOps Services в ADT. Відкрийте клас CowListActivity з Dairy Production Center Android Application Package.
- Наступний код з класу CowListActivity демонструє виклик RESTful-служби CowList, опублікованій рівнем служб. Результатом виклику RESTful-служби на попередньому етапі буде рядок JSON. protected Boolean doInBackground (final String ... args) {// Creating service handler class instance RESTInvoker sh = new RESTInvoker (); System.out.println ( "URL in cowlist -------" + url); // Making a request to url and getting response String jsonStr = sh.makeServiceCall (url, RESTInvoker.GET); Log.d ( "Response:", ">" + jsonStr); return true; } // RESTInvoker public String makeServiceCall (String url, int method, List <NameValuePair> params) {try {// http client DefaultHttpClient httpClient = new DefaultHttpClient (); HttpEntity httpEntity = null; HttpResponse httpResponse = null; // Checking http request method type if (method == POST) {HttpPost httpPost = new HttpPost (url); if (params! = null) {httpPost.setEntity (new UrlEncodedFormEntity (params)); } HttpResponse = httpClient.execute (httpPost); } Else if (method == GET) {// appending params to url if (params! = Null) {String paramString = URLEncodedUtils .format (params, "utf-8"); url + = "?" + ParamString; System.out.println ( "URL in Service Handler ----" + url); } System.out.println ( "URL in Service Handler ----" + url); HttpGet httpGet = new HttpGet (); URI website = new URI (url.trim ()); httpGet.setURI (website); httpResponse = httpClient.execute (httpGet); } HttpEntity = httpResponse.getEntity (); response = EntityUtils.toString (httpEntity); System.out.println ( "Response from Output Cow Rest call ----" + response); } Catch (UnsupportedEncodingException e) {e.printStackTrace (); } Catch (ClientProtocolException e) {e.printStackTrace (); } Catch (IOException e) {e.printStackTrace (); } Catch (URISyntaxException e) {// TODO Auto-generated catch block e.printStackTrace (); } Return response; }
- Для представлення даних в мобільному додатку ви можете виконати розбір рядка JSON, отриманої в результаті виклику RESTful-служби (перелік корів для виробника). Для розбору використовуйте наступний код: if (jsonStr! = Null) {JSONObject jsonObj = new JSONObject (jsonStr); System.out.println ( "JSONString in After converting to JSON Object -------" + jsonObj); // Getting JSON Array node cows = jsonObj.getJSONArray (TAG_COWS); // looping through All Cows for (int i = 0; i <cows.length (); i ++) {JSONObject c = cows.getJSONObject (i); System.out.println ( "JSONString Inside i loop -------" + c); String rfid = c.getString (TAG_RFID); String cowname = c.getString (TAG_COWNAME); String cowid = c.getString (TAG_COWID); String herdid = c.getString (TAG_HERDID); String report = c.getString (TAG_REPORT); // tmp hashmap for single contact HashMap <String, String> cows = new HashMap <String, String> (); // adding each child node to HashMap key => value cows.put (TAG_COWID, cowid); cows.put (TAG_RFID, rfid); cows.put (TAG_HERDID, herdid); cows.put (TAG_REPORT, report); // adding contact to contact list cowsList.add (cows); }}
- Відкрийте перелік корів в мобільному додатку за допомогою ListAdapter: protected void onPostExecute (final Boolean success) {// Dismiss the progress dialog if (pDialog.isShowing ()) {pDialog.dismiss (); } / ** * Updating parsed JSON data into ListView * * / ListAdapter adapter = new SimpleAdapter (context, cowsList, R.layout.cowinfo, new String [] {TAG_COWID, TAG_RFID, TAG_HERDID, TAG_REPORT,}, new int [] { R.id.cowid, R.id.rfid, R.id.herdid, R.id.report}); setListAdapter (adapter); }
Робота над кодом завершена. Ви можете виконати побудову і запустити додаток в Android Emulator:
- У середовищі Eclipse перейдіть в меню Project (Проект)> Properties (Властивості)> Android.
- Переконайтеся, що обрані API для вашого рівня API, потім натисніть Apply (Застосувати).
- Відкрийте Android Virtual Device Manager, виберіть пристрій, натисніть Edit (Редагувати) і встановіть Target на API Level XX (де XX позначає рівень API).
- Клацніть правою кнопкою на пункт меню Project (Проект) і виберіть Run As (Запустити як)> Android Application (Додаток Android).
- Увійдіть в мобільний додаток з ID виробника.
- Натисніть Show My Cows (Показати корів).
З'явиться перелік корів для виробника.
- Порівняйте перелік з даними, що зберігаються в базі даних, які відображені в вихідному перелік корів .
висновок
Побудувати мобільний додаток в стилі MVC за допомогою Bluemix нескладно. Просто дотримуйтесь основам реалізації MVC при плануванні того, які дані будуть відображатися, як саме вони будуть відображатися, і які події і призначений для користувача введення потрібно буде обробляти при роботі з додатком на вашій власній платформі MVC. Bluemix PaaS є дружню до користувача платформу з великими можливостями, зокрема, середовищами виконання, службами та мобільними функціями, які допоможуть вам швидко і легко розробити MVC-додаток.
Ресурси для скачування
Схожі теми
Підпишіть мене на повідомлення до коментарів
Format (params, "utf-8"); url + = "?