Одна из самых больших проблем, с которыми сегодня сталкиваются программисты, — это заставить единую базу кода работать в различных системах. Очевидно, будет интересно, как такая гигантская компания, как Google, решит эту проблему.
Google только что создал новый почтовый клиент под названием Inbox. На данный момент он проходит тестирование только по приглашениям, но блог Gmail раскрыл его архитектуру всем.
Проблема, с которой столкнулись разработчики, заключалась в том, как создать три «родных» приложения — одно для Интернета, одно для Android и одно для iOS. Очевидно, они хотели избежать написания одного и того же приложения трижды. Они быстро исключили «гибридное» нативное / веб-приложение, используя что-то вроде Cordoba из соображений эффективности. Единственным вариантом было создать три нативных приложения, которые разделяли бы как можно больше основной логики.
Похоже, что приложение для Android было основным проектом разработки, и это единственное из трех приложений, созданное с использованием «родных» инструментов, например Java и Android SDK.
Модель данных была написана только один раз на Java, и пользовательский интерфейс Android был построен поверх нее. Модель данных предоставляла абстракции таких вещей, как беседы, напоминания, контакты и метки.
Имея полноценное приложение для Android, осталось только перенести его на две другие платформы.
Веб-приложение было создано с помощью кросс-компилятора GWT (Google Web Toolkit) для преобразования модели данных Java в JavaScript. GWT — это проект с открытым исходным кодом, созданный Google в 2006 году, чтобы позволить Java-программистам создавать веб-приложения с помощью JavaScript. Были предположения, что Google может быть не так заинтересован в GWT, как когда-то — в основном из-за своей приверженности языку Dart. В 2012 году Google сделал GWT полностью открытым проектом. С его использованием в Inbox кажется, что GWT по-прежнему является полезным инструментом для Google и достаточно хорош для использования в новых проектах. Пользовательский интерфейс веб-приложения, похоже, был построен с использованием JavaScript, HTML и CSS.
Приложение для iOS было создано аналогичным образом, но на этот раз с использованием J2ObjC. Этот переводчик с Java на Objective-C — еще один проект Google с открытым исходным кодом, который не так хорошо известен, как GWT. Он не пытается переводить код пользовательского интерфейса, поэтому, как и для Android, пользовательский интерфейс был написан поверх модели данных в Objective-C.
Единственное, что требовало особого внимания к Java-коду, — это добавление аннотаций @WeakReference, чтобы позволить Objective-C, который использует подсчет ссылок, обрабатывать ссылочные циклы в Java-коде.
Команда утверждает, что в целом около двух третей кода разделяется между тремя приложениями, и очевидно, что это делает упражнение стоящим.
Есть что-то очень раздражающее в том, что пользовательский интерфейс в каждом случае приходится писать с нуля. Конечно, мы можем найти способ создать инструмент, который выполняет всю работу и оставляет программисту только настраивать пользовательский интерфейс, чтобы он выглядел на 100% нативным.