Софтфон для Android: технологии, которые мы используем
Софтфон для Android, который мы недавно анонсировали, стал логичным развитием и долгожданным дополнением продуктовой линейки — теперь в ней представлены не только традиционные версии для WIndows и macOS, но и решения для мобильных устройств.
Вместе с тем, логика работы и архитектура всё та же, двухуровневая: по-прежнему есть и клиентская, и серверная часть. Организация процесса разработки также не претерпела изменений: код необходимо где-то хранить, а сборку — тестировать перед релизом, чтобы продукт был качественным.
Рассказываем, как это происходит у нас.
Подход к разработке
В работе над Android-приложением мы исповедуем MVVM-подход (Model-View-ViewModel), отделяя визуальную часть и пользовательский интерфейс (UI) от бизнес-логики и данных. Его большой плюс и преимущество — возможность модульного тестирования (юнит-тестов). MVVM вообще является одним из самых популярных подходов для проектирования клиентских приложений, особенно в средах, предполагающих архитектуру Model-View-Controller (MVC) или Model-View-Presenter (MVP, не путайте с minimum viable product 🙂).
Думаем, что читатель простит нас, если мы сделаем небольшое лирическое отступление и расскажем в общих чертах, как в данном случае распределяются компоненты и за что они отвечают.
Model (Модель):
Берет на себя представление данных и бизнес-логику программы — может включать в себя операции с данными, хранение информации и управление состоянием приложения.
View (Представление):
Отвечает за взаимодействие с пользователем и отображение данных — визуализирует то, что предоставляет ViewModel.
ViewModel (Модель-представления):
Это посредник и связь между Model и View — преобразует данные из Model в формат, который затем отображается в View, а также обрабатывает действия пользователя (перенаправляет их в Model).
Конец лирического отступления.
Так выглядит MVVM
Таким образом, на выходе имеем улучшение читаемости кода и возможность масштабирования (а про облегчение тестирования мы уже говорили). Поэтому MVVM-подход находит широкое применение в разработке приложений с графическим интерфейсом — таких как веб-приложения, программы для десктопов и мобильные приложения (как раз наш случай).
Клиентская часть, серверная часть
Клиентская часть Softphone.Pro написана на языке Kotlin. Википедия говорит, что это статически типизированный, объектно-ориентированный язык программирования, работающий поверх Java Virtual Machine (JVM, Виртуальная Машина Java) и разрабатываемый компанией JetBrains.
Таким образом, Kotlin полностью совместим с Java, то есть из кода на Kotlin можно спокойно обращаться к привычным Java-библиотекам. Более того, классы Kotlin и Java могут уживаться в одном package — и это круто.
Кстати, забавный факт: язык Kotlin назван в честь острова в Финском заливе. Мы, как тру-программеры, любим такие пасхалочки (поговаривают, что Java тоже был назван в честь индонезийского острова Ява). Может, и в честь Softphone.Pro однажды назовут остров. Или город. Кто знает :)
Как бы то ни было, сейчас Kotlin и является официальным языком разработки под Android, и весьма популярен в энтерпрайз-проектах. Короче говоря, наша клиентская часть в тренде, не извольте сумлеваться.
Что касается серверной части, то можно сказать, что их у софтфона две, как бы удивительно это ни звучало. Дело в том, что софтфону нужен будильник, чтобы он просыпался в момент звонка, иначе звонок будет потерян и теряется сам смысл мобильности. Кроме того, есть сервис Team, в который передаётся информация о звонках, чтобы руководитель мог анализировать происходящее и мониторить ситуацию в моменте.
И Team, и PUSH написаны на Go (также известен как GoLang, но не путайте с Go!) — компилируемом многопоточном языке программирования, разработанном в недрах Google. Go поддерживает как объектно-ориентированный, так и функциональный стили. Мы любим Go за простоту, эффективность, многопоточное программирование, кроссплатформенность и высокую скорость компиляции — и это то, что объединяет нас с ВК, Убером, Дропбоксом, Яндексом, Озоном, Авито… ну и хватит, пожалуй, громких имён :)
Таким образом, глобально клиентскую и серверную части можно описать всего несколькими словами — Java, Kotlin, Go. Звучит, как жизнеутверждающий девиз! Да и выглядит красиво.
Три грации. Классика!
Тестирование и управление кодом
Мы уже упоминали модульное тестирование (тестирование на уровне юнитов, отдельных блоков приложения), когда говорили про МVVM в первой части статьи — в нашем случае это происходит с использованием драйвера WinAPI и скриптов на Питоне (Python). Выглядит это так: сделали коммит — сразу запустились автотесты и потом пришли уведомления в телеграм: ОК или не ОК (извините, что-то на трукодерском).
Бок о бок с этим идет тестирование регрессионное (добавили фичу, пофиксили баг — хотим убедиться, что всё остальное не пострадало). И конечно, интеграционное с системным тоже есть: первое нужно для проверки взаимодействия модулей между собой, а второе — чтобы убедиться, что приложение взаимодействует с окружением (операционной системой, сетью и прочим).
Код у нас, как и у всех, ветвится раскидистым деревом, поэтому нам, конечно, не обойтись без системы контроля версий. В нашем случае это Git с графическим интерфейсом TortoiseGit (хотя есть и олдскулы, предпочитающие bash). А храним мы написанный код в Redis и PostgreSQL (серверную часть).
Как видите, и технологии достойные, и продукт. И, кстати, готовый к брендированию под вас — его можно переименовать, переназвать и разместить ваш логотип. Поэтому, если вам нужен Whitelabel-софтфон для Android — вы знаете, что делать! (Написать нам на info@softphone.pro 😉)
Всем красивого кода и стабильной работы 📱
ТАКЖЕ ПО ТЕМЕ
Blog
Софтфон для Android: будить или не засыпать?
Blog
Мобильный софтфон с возможностью WhiteLabel-брендирования: как мы его делали
Blog
Реальный софтфон: что нужно людям
Help
Решение проблем с качеством связи IP-телефонии при использовании Softphone.Pro