Який підхід слід використовувати для розробки програм, орієнтованих на декілька платформ?


9

Для програм, орієнтованих на декілька платформ, я бачу в основному два підходи до розробки,

  • Зайдіть на якусь платформу для розробки JAVA. Майте одне рішення коду і нехай проміжний час виконання обробляє різні платформи. Якщо щось піде не так на будь-якій платформі, трохи підправте код. Але зберігайте це однаково для всіх.

  • Складіть модульний код, що розділяє основну логіку та інтерфейс користувача. Розробіть окремі інтерфейси для відповідних платформ, які будуть викликати одні й ті ж основні бібліотеки. Створіть програму окремо для кожної з цільових платформ.

Отже, за яким слідувати? Я знаю, відповідь розпочнеться з " Це залежить ". Але я хочу почути вашу думку щодо цих підходів та факторів, які слід враховувати для вибору будь-якого з них.


2
Що стосується цього питання, то немає можливості відповісти на нього, не використовуючи "це залежить". Це залежить від такої кількості факторів, як, наприклад, які фактичні платформи ви маєте на увазі, чи плануєте ви автономну програму для настільних ПК чи плануєте використовувати деякі веб-сервіси, які ваші плани щодо користувальницького інтерфейсу (однакові для кожної платформи чи різноманітних?) Та так далі. Як ви думаєте, модель розробки Qt чи Gtk потрапляє до першої моделі чи ні? А як .Net та Mono? Чи повинен я продовжувати ...?
Paweł Dyda

@Gulshan Вибачте, очевидне питання - чи є причина, що це не може бути веб-додаток та / або зроблено з чимось на зразок Adobe Air?
медуза

Цей сайт більше стосується суб'єктивних питань та відповідей, але це може спричинити його прийняття. Це просто змушує нас відчувати, що ти граєш. Я схильний шукати нещодавно розміщені питання, а не без відповіді.
JeffO

Відповіді:


3

Поточні суперечки Oracle / Apache / Google убік, все-таки важко перемогти JVM для цієї мети. Це дійсно дуже висока якість на більшості платформ, універсальна, і ви маєте на вибір велику кількість мов (Java, Clojure, Scala тощо). Це дозволяє орієнтуватися на одну архітектуру машини (VM), і не надто турбуватися про конкретне обладнання кінцевого користувача.

Зважаючи на це, існують певні типи програм, які можуть бути не настільки підходящими: мережеві мережі низького рівня, як і велика обробка графіки / відео.


2

Перейдіть до HTML5. Будь-яка платформа з браузером HTML5 може запускати вашу програму. Хоча HTML5 ще не готовий до великого часу, підхід до веб-додатків є.


2
Немає повнофункціональних браузерів HTML5.
Крейг

2

У звуковому редакторі Audacity ми використовуємо wxWidgets як нашу бібліотеку крос-платформ. Оскільки нам потрібно зв’язатися з бібліотеками С, і нам потрібна швидкість та низький рівень доступу, підхід JVM для нас не буде працювати. Код GUI на 95% однаковий на всіх платформах. Ми використовуємо #ifdefs для невеликих варіацій. Однак ми вважаємо важливим, щоб розробник працював над кожною з трьох платформ (Mac, Windows Linux), оскільки навіть за допомогою бібліотеки крос-платформ занадто легко змінитись на одній машині, щоб зламати речі на іншій.

Якщо ви можете отримати необхідну продуктивність, перейдіть на JVM. Якщо ви не можете, використовуйте QT або wxWidgets, і я б запропонував QT над wxWidgets, оскільки це менше роботи, щоб зробити його красивим.


1
+1 для "важливо, щоб розробник працював над кожною платформою". Міжплатформні проекти швидко стають єдиною платформою, якщо ви розробляєте лише одну платформу за раз.
AShelly

2

Як розробник у режимі реального часу, я успішно використовував варіант, подібний до 2 - окремі модулі, орієнтовані на платформу, із загальним API, використовуваним основною логікою. Однак у мене нічого не було інтерфейсу - мережа, аудіо, потокова передача даних - в цьому випадку саме апаратний інтерфейс низького рівня є специфічним для платформи.

Я зробив це таким чином з кількох причин:

1) Для отримання оптимальної продуктивності на кожній платформі

2) Скористатися функціями, пропонованими лише на 1 платформі

3) (J) VM не існувало для деяких платформ (вбудовані системи, ігрові консолі ...)


2

Це залежить від того, що для вас важливо :)

Коли ми стикалися з цим вибором для міжплатформних додатків Mac / Windows близько 10 років тому, ми добре роздивились різні варіанти крос-платформ - Java, Qt, wxWidgets і т.д. Проблема, яку ми мали, полягала в тому, що зовнішній вигляд користувальницький інтерфейс був для нас дуже важливим, і всі додатки "на платформу" виглядали, ну, компрометованими. Ми закінчили кусати кулю і створили власне крос-платформенне ядро ​​зі спеціальним інтерфейсом для кожної платформи зверху (написано в PowerPlant для Mac та MFC в Windows). З часом ми отримали досить хороший результат у цьому, а частина "крос-платформи" стала товще, не заважаючи користувальницькому інтерфейсу.

Зараз ми знову розглядаємо це рішення для нового проекту. Дивлячись на варіанти зараз, я, певно, пішов би з Qt - це безкоштовно і справді, здається, добре дозріло. Java може бути варіантом, але ми не можемо реально сприйняти ефективність (ми робимо обробку 3D зображення).

Якщо інтерфейс користувача для вас дійсно важливий, я підозрюю, що вам доведеться інвестувати досить багато часу, щоб виправити речі на кожній платформі, будь-то ви використовуєте щось на зразок Qt або ролик власний. Для внутрішнього або спеціалізованого додатка, де користувачі можуть більше сприймати менш полірований інтерфейс користувача, це може бути добре!


1

Усі роблять велику метушню щодо таких мов, як Java як "кросова платформа", але те, про що вони насправді говорять, це те, що ви можете скласти один раз і працювати всюди. Навіть такою мовою, як Java (або C # / mono), вам все одно знадобляться шари абстракції, щоб мати справу з конкретними деталями ОС у деяких областях.

C ++, і насправді більшість мов є крос-платформою, потрібно просто компілювати, щоб націлити на кожну платформу.

Основним є процес, а не інструменти / мови:

  1. Переконайтеся, що у вас є інтегрований процес збирання, який будує та виконує одиничні тести для всіх цільових платформ .
  2. Переконайтесь, що кожен розробник тестує на всіх цільових платформах перед тим, як перевірити код - Це, очевидно, означає, що будь-коли розробник має доступ до відповідної кількості машин / vms.
  3. Анотація добре. Анотація всього, що викликає рідну апісу. Пишіть бібліотеки, які завершують ці дзвінки.
  4. Якщо ви робите що-небудь понад досить простий інтерфейс форм, який просто задовольняє найменший загальний знаменник, просто прийміть, що код GUI не є крос-платформою. Абстрагуйте свій графічний інтерфейс / презентаційний шар та кодуйте його окремо для кожної платформи. Так, є набір інструментальних інструментів між платформних інтерфейсів, які добре підходять для прямолінійних додатків, але якщо ви робите щось більш досконале, вам потрібно буде зашифрувати корінний потенціал платформи.

Ці кроки однакові незалежно від того, якою мовою / набором інструментів / рамкою ви користуєтесь.


1

Використовуйте Інтернет!

Якщо серйозно, якщо ви хочете НАЙБІЛЬШЕ за свій долар, напишіть веб-додаток.

Чому?

  • Зазвичай веб-клієнти не вимагають великої потужності ПК.
  • Веб-клієнти - ВСЕ. Не тільки на ПК / MAC / Linux, але і на телефонах, мобільних пристроях тощо.
  • Нічого додаткового для завантаження для користувачів! (Зазвичай, якщо ви не хочете чогось фантазії і не використовуйте Flash або Silverlight)
  • Усі загальні компоненти знаходяться на стороні сервера, і це можуть бути Java, .NET, PHP або халява з масиву наявних у вас компонентів. Клієнт не повинен байдуже!

Навіть два підходи, які ви згадали, дуже схожі. Веб-браузер надає HTML для кількох базових архітектур. Аналогічно, JVM інтерпретує код Java так, що має сенс для базового обладнання. Однак у Інтернеті просто є більш широка клієнтська база!


0

Мені пощастило з Моно. Я можу написати той самий код для машин Windows, як і для машин Linux, і здебільшого він працює на обох. І я можу використовувати навички, які я вже знаю в C # та Winforms.


Який інтерфейс ви використовуєте, або ви маєте на увазі додатки на сервері? Мені цікаво, тому що у мене працює додаток, що використовує Winforms, і я переніс Mono, і це приємно, але знадобиться ВЕЛИЧЕЗНА робота, щоб бути схожою на "справжні" winforms. Можливо, GTK # краще? MonoDevelop приємний, але, можливо, трохи незграбний.
Дан Розенстарк

З Моно можна дотримуватися обох підходів. Як Яр, кого ти слідкуєш і чому? Це питання.
Гульшан

Так, я не розумів, що ви шукаєте ідеальну вірність форми між платформами. Ви можете отримати це за допомогою GTK #, але ви отримаєте його за рахунок "досить", тому що звичайний набір інструментів, як це, має стосуватися "найменшого загального знаменника". Я схильний погодитися з StartClass0830: HTML5 буде дуже багато роботи, але ви могли б зробити кілька справді крутих платформних речей з ним.
Роберт Харві

0

Спершу зробіть доказ концепції.

Якщо це досить складний додаток, виведення доказів концепції дасть вам уявлення про те, які мовні функції вам потрібні та які саме області вам знадобляться, щоб використовувати рамкові або сторонні бібліотеки.

Мовні функції та бібліотеки, які вам потрібні, визначатимуть, яку мову ви в кінцевому підсумку виберете (і, таким чином, як ви будете приймати наближення до підтримки платформи)


0

Я створив систему, починаючи з додатків для настільних комп'ютерів, 15 років тому, коли Java ще була в зародковому стані і не готова до використання у створенні подібних програм. Я знав, що потрібно мати ядро ​​в C ++, і створив його з самого початку, щоб він був крос-платформою, включаючи використання типорозмірів (наприклад, int32 замість int або long), щоб він міг працювати на Mac, Windows та UNIX (до Linux днів).

У той час, коли я намагався шукати гарне середовище міжплатформного інтерфейсу, тоді було декілька, зокрема XVT. Я пройшов навчання для XVT, і коли почав створювати справжнє додаток, зрозумів, що не зможу створити чистий, рідний вигляд і відчуття на платформі (починаючи з Mac). Тож я відмовився від цієї ідеї і створив вбудований інтерфейс Mac (PowerPlant) поверх портативного ядра.

Через пару років ми перейшли на Windows (інтерфейс користувача у MFC). Це було швидше побудувати інтерфейс вдруге, ми короткий час паралельно підтримували інтерфейс Mac та Windows, а потім перейшли до Windows. Пізніше ядро ​​перейшло на різні версії UNIX та Linux, щоб ми могли запускати обчислення на сервері. Ядро зробило порт добре, з деякими налаштуваннями, коли ми зробили його 64-бітним.

Тепер я повернувся до використання Mac, і я хотів би, щоб ми могли повернутися до Mac, але розмір і складність програми робить це важким вибором. Це все ще має сенс для більшості цього додатка бути настільним додатком - це як середовище CAD. Але замість того, щоб знову створювати інтерфейс користувача на мові C / C ++, орієнтованій на платформу (і надалі підтримувати інтерфейс на основі MFC), я більше схильний переписати весь стек на Java, щоб він міг працювати на декількох платформах.

Можливо, все ще існують причини для запуску ядра, що не є Java, скажімо, C ++, як ми. Але я б хотів запустити ранні тести на ефективність, щоб побачити, чи справді це потрібно. І я б уважно придивився до свого інтерфейсу, щоб побачити, чи можу я будувати його як веб-додаток, підключений до ядра за допомогою веб-служб, щоб я міг мати коло клієнтів - настільні додатки, мобільні додатки, веб-додатки тощо. Якщо мені потрібен фрагмент на C або C ++, чи можна його написати під шаром Java? Або як веб-сервіс?

Ще одне питання - наскільки довго буде працювати ваш додаток? Наскільки складним він буде рости? Якщо у вас є якісь ідеї щодо цього, врахуйте можливу довговічність будь-яких бібліотек користувальницького інтерфейсу, якими ви користуєтесь, і вашу здатність з часом людей допомагати їх підтримувати. Зараз це може бути важко розглянути, але варто подумати.

- Олексій


JVM виявився дуже стабільним з точки зору порівнянності бібліотеки часу виконання. Для цього сценарію було б дуже добре підходити ...

0

Якщо ви можете зробити це веб-додатком, зробіть це веб-додатком. Використовуючи набори інструментів на зразок ExtJS , порівняно з користувальницькими інтерфейсами, сумісними між веб-браузерами, можна зробити гарний вигляд.

В іншому випадку, Java або QT + C ++ або C + Wx можливі варіанти, щоб мати одне джерело для всіх.

Ваш другий підхід підходить, якщо ви хочете, щоб програма виглядала і відчувала себе рідною на кожній цільовій платформі. Програми Native Mac виглядають і відчувають себе інакше, ніж рідні програми Windows, просто використання іншої шкіри та клавіатурних зв'язків буде недостатньо для цього.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.