Пять Правил Успешного Кроссплатформенного Проекта

От переводчика: В настоящее время я постепенно собираю литературу по проектированию кроссплатформенного программного обеспечения.

Этот короткий текст — самое интересное, что я нашел до сих пор.

Все, что нужно сделать программисту для реализации конкретной функции, — это Google, но есть ли особые требования к дизайну? Скажем, ветвление #ifdef в методах — единственное средство выделения частей проекта, специфичных для платформы? (Не много ли макарон?) Есть ли более высокоуровневые подходы, закономерности, «дополнения» над #ifdef ? Надеюсь, этот пост послужит пищей для дальнейшего обсуждения.

Из своего опыта кроссплатформенной разработки я усвоил несколько простых принципов, соблюдение которых поможет вам избежать распространенных ошибок.

Разработайте свое приложение с использованием концепции MVC. Пожалуй, это главный залог успеха кроссплатформенного проекта.

У вас с самого начала должны работать две команды: для Windows и Mac. Опыт обеих групп важен на ранних этапах проектирования и реализации, если вы серьезно относитесь к кроссплатформенности.

1 Используйте одну ветку кода в VCS. Отдельные ветки часто выходят из-под контроля и больше не могут быть синхронизированы.

2 Используйте #ifdef для кода, специфичного для платформы.

Написание кода C/C++, соответствующего стандартам ANSI; используйте стандартные библиотеки ANSI и STL. Многие кроссплатформенные проекты используют несколько компиляторов, поэтому важно свести к минимуму ошибки и предупреждения компилятора.

Возьмите за правило включать высокий уровень предупреждений и проверять, чтобы предупреждений не было во всем коде.

Поставьте Mac и ПК на стол каждого разработчика.

Время от времени возникает ситуация, когда разработчик одной платформы хочет посмотреть, как его код повлияет на другую платформу.

Если у разработчика нет простого доступа к другой машине, существует большая вероятность того, что его коммит нарушит работу приложения на другой платформе.



Примечания

[1] Этот важный момент был упущен в команде, где я работал в 1999 году.

Проект был хорошо построен с использованием MVC. Модель — DLL на C++, презентация — в Swing через JNI, все написано на CodeWarrior для Mac OS и Windows. Звучит хорошо, правда? Итак, команда Windows первой выполнила проект и передала его команде Macintosh. Потом выяснилось, что приложение было написано в спецификации Java 2, которая на тот момент не поддерживалась на Mac. Дальше - больше: имена исходных файлов превышали лимит Finder в 31 символ, файлы проекта не компилировались из-за битого #includs. Руководство решило разделить проект на две ветки, в каждой из которых осталось куча ненужных крестиков.

-код платформы.

Этих потерь можно было бы избежать, если бы у нас были разработчики Mac, которые консультировали команду с самого начала.

^ [2] Однажды я руководил проектом, и наше руководство решило форкнуть код, чтобы раньше запустить версию для Mac. Хотя это решение сэкономило несколько месяцев, на повторное объединение двух филиалов ушло еще полтора года.

^

Заключение (от переводчика)

Совет банален, но от этого он не менее ценен для людей без такого опыта.

Особого внимания заслуживают сноски.

Думается, что разветвление проекта – это первое, чего стоит опасаться, ведь мотивов для разделения может быть миллион, да и вообще Вселенная стремится к хаосу, но в любом случае причиной будет неправильное архитектурное решение, а Последствием будет вердикт со стороны руководства.

Мы перепишем приложение MFC для Mac и Linux и снова напишем графический интерфейс на HTML5/WebKit. Для нас это первый подобный проект, хотелось бы избежать как можно большего количества граблей.

Поделитесь, пожалуйста, своим опытом! Со своей стороны, результаты выложу на Хабре.

Теги: #кроссплатформенность #кроссплатформенная разработка #Идеальный код #дизайн и рефакторинг

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.