Часть 2: Набор инструментов для разработки

Я Альберт, основатель и технический директор Meru Health. В этой серии сообщений блога, состоящей из трех частей, я поделюсь своим опытом, советами и идеями о современной веб-разработке в здравоохранении.

Прочтите мой первый пост о современной культуре веб-разработки и мировоззрении Meru Health.

Современный набор инструментов делает разработку быстрой и простой

Что делает современную веб-разработку настолько мощной, так это современные инструменты и библиотеки, которые абстрагируют повторяющиеся задачи, ускоряют веб-разработку и решают общие проблемы. Они также делают код более приятным для написания, чтения и сопровождения.

Вот некоторые из наиболее заметных инструментов, которые мы используем:

Одностраничные приложения и инструменты сборки

Современные веб-сайты действительно ближе к приложениям, чем традиционные веб-сайты. Одностраничные приложения работают в основном с одним HTML-документом и обеспечивают более быстрое реагирование, чем традиционный способ просмотра одного HTML-документа.

Чтобы сделать такую ​​разработку более приятной, мы используем несколько инструментов в нашем стеке:

  • Babel перенесет новейшие функции ECMAscript на более широко поддерживаемый JavaScript
  • Webpack для нашего процесса сборки при разработке или производстве
  • SASS для упрощения поддержки CSS
  • Библиотека Material UI для быстрой разработки с приличным пользовательским интерфейсом из коробки

Совместное использование кода и линтинг

Используя JavaScript в качестве основного языка для внутреннего и внешнего интерфейсов, мы можем использовать аналогичные инструменты и соглашения на всех наших платформах: панель управления веб-терапевтом, мобильные приложения iOS и Android, а также сервер Node.js. Это означает совместное использование одних и тех же соглашений о коде, использование аналогичных сред тестирования и даже совместное использование части нашего написанного кода между службами с использованием общих пакетов. Это не только помогает нам поддерживать код, но и делает написание кода для разных платформ более приятным, поскольку не нужно переходить от одного соглашения или набора инструментов к другому.

В настоящее время мы используем следующие соглашения:

Пока мы не вводили статическую типизацию в JavaScript, но планируем сделать это в ближайшем будущем, чтобы упростить поддержку кода. И Flow, и TypeScript сегодня предлагают для этого отличный набор инструментов с интеграцией IDE и автозаполнением.

Реагировать и Redux

Поскольку наши мобильные приложения используют React Native, было естественно расширить набор инструментов React до веб-панели для терапевтов. Мы даже разделяем селекторы и часть дерева состояний Redux между мобильными приложениями и панелью управления.

Чтобы решить проблему наличия нескольких состояний, постоянного хранилища на клиенте (локальное хранилище в Интернете и асинхронное хранилище в React Native) и базы данных на сервере, мы создали систему, в которой состояние пользователя является отражением состояния на сервере. сервер. Всякий раз, когда выпускаются обновления, изменения в локальном состоянии происходят немедленно, обеспечивая оптимистичный рендеринг. Однако как только изменения записываются на сервер, состояние обновляется до самой последней версии. Некоторые деревья состояний также автоматически сохраняются в постоянном хранилище для ускорения запуска приложения.

Тестирование

В настоящее время мы проводим модульные тесты на всех наших платформах для выявления наиболее важных или сложных функций, правил авторизации, а также тесты интеграции для нашего API. Мы еще не проводим собственное тестирование на стороне клиента для наших приложений для iOS или Android, однако мы планируем провести некоторые из них в будущем. Мы используем Jest в качестве предпочтительной среды, поскольку она поставляется в комплекте с React Native и является хорошим расширением более традиционной среды тестирования Jasmine.

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

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

В ближайшем будущем мы добавим непрерывную интеграцию с использованием Travis и Fastlane, сделав выпуски еще менее «дорогими» и поддерживая философию раннего и частого выпуска.

Баланс безопасности с использованием современных сервисов

Мы в значительной степени полагаемся на поставщиков внешней инфраструктуры, таких как Heroku для наших серверов Node.js и Firebase для API хранения данных в реальном времени. Тем не менее, поскольку мы собираем много конфиденциальных данных о наших пациентах, мы обязаны соблюдать несколько правил и передавать их любым поставщикам услуг.

Чтобы обеспечить высочайший уровень безопасности данных пациента, мы деидентифицируем личные данные нашего пользователя (имя, адрес электронной почты ...) из данных приложения (прогресс пользователей или состояние в программе) с помощью криптографического хеширования. Без данных, позволяющих установить личность, данные приложения совершенно бесполезны для изучения чего-либо о пациенте. Его могут свободно использовать инженеры для отладки, передавать на любые внешние службы, такие как Firebase или Mixpanel, и свободно анализировать без нарушения личности пациентов.

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

Такой подход позволяет нам получить лучшее из обоих миров: использовать самых мощных и современных поставщиков услуг, сохраняя при этом полный контроль над данными о пациентах.

В следующем посте я опишу, что означает современная веб-разработка с точки зрения конечного пользователя. Следите за нами и подпишитесь на нашу рассылку, чтобы получать обновления в будущем. Также ознакомьтесь с моим предыдущим постом о современной культуре веб-разработки и мировоззрении Meru Health.

Пожалуйста, дайте нам пару аплодисментов, если вам понравился этот пост в блоге!

PS. В Meru Health мы сочетаем современные веб-разработки с опытом в области здравоохранения и передовой наукой, чтобы предложить более эффективное и масштабируемое решение для лечения депрессии. Наша цель - вылечить 1 миллион пациентов к 2022 году. Ознакомьтесь с нашими предварительными результатами.

PPS. Мы ищем компетентных разработчиков JavaScript, которые хотят максимизировать свое положительное влияние в мире, чтобы присоединиться к нашей команде. См. Открытые вакансии и свяжитесь с [email protected].