Софтфон для 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

Таким образом, на выходе имеем улучшение читаемости кода и возможность масштабирования (а про облегчение тестирования мы уже говорили). Поэтому 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


Последние статьи