Что нужно учесть при проектировании своего приложения
Итак, вы собираетесь создать приложение. Вы продумали его архитектуру? Посмотрите советы по проектированию приложения, чтобы сделать это правильно.
![Что нужно учесть при проектировании своего приложения](https://media.tproger.ru/uploads/2018/06/application-architecture-mini.png)
Перед тем, как создавать приложение, необходимо продумать его архитектуру. Как это сделать правильно рассмотрим в статье.
Упростите жизнь разработчикам
Поскольку самый ценный ресурс — человеческий, любой используемый фреймворк или инструмент должны помогать разработчику оптимизировать свою продуктивность.
Что упростит разработчику жизнь:
- Сделайте приложение максимально простым и понятным;
- Не перегружате его излишней функциональностью — внедряйте только необходимые фичи;
- Используйте общепринятый подход к решению задач;
- Используйте вспомогательные инструменты;
- Сделайте приложение выразительным — каждая задача, решаемая в нём, должна быть очевидной;
- Если вы планируете использовать сторонние библиотеки, то позаботьтесь о том, чтобы они были наилучшими.
Чтение по теме: Сначала — монолит, или правильный путь к микросервисной архитектуре
Уделите внимание мелочам
- Решайте все задачи, поставленные перед проектом, последовательно;
- Сделайте так, чтобы самые часто встречающиеся задачи выполнялись проще и прозрачней других;
- Сделайте приложение легкорасширяемым;
- Сделайте его настолько простым, насколько это возможно;
Помните о юзабилити
Уровень юзабилити жизненно важен по ряду причин. Он повышает доверие и удовлетворённость клиентов и снижает затраты.
- Исключите из приложения технологии, специфичные для конкретного поставщика;
- Ваше приложение должно поддерживать последние стандарты;
- Обеспечьте приложению быстрый отклик;
- Ваше приложение должно по максимуму использовать графические возможности;
- Добавьте анимацию там, где это уместно;
- Добавьте поддержку A/B тестирования;
- Включите в приложение поддержку аналитики.
Обеспечьте безопасность
Безопасность — это способность системы снизить вероятность злонамеренных или случайных действий за пределами ожидаемого использования системы и предотвратить раскрытие или потерю информации.
- Проходите сторонние пентесты;
- Внедряйте стандарты безопасности везде, где это возможно;
- Следуйте лучшим практикам безопасности.
Обеспечьте надёжность
Надёжность — это способность системы продолжать работать ожидаемым образом с течением времени. Надёжность измеряется как вероятность того, что система не даст сбой и что она будет выполнять свои функции в течение заданного интервала времени.
- Очевидно, что в системе не должно происходить сбоев, но всё же они происходят. Нужно обеспечить журналирование и анализ таких сбоев;
- Система должна быть максимально автономной — если произошёл сбой, будет идеально, если она сама с этим справится;
С умом подходите к производительности
- Обеспечьте приложению уровень производительности, соответствующий вашей задаче и возможностям. Иногда увеличение производительности может слишком дорого стоить с точки зрения затрачиваемых человеческих и аппаратных ресурсов. Если производительность для ваших задач не критична, не стоит на этом зацикливаться;
- Минимизируйте задержку до появления интерфейса (< 250 мс для 90% запросов, < 2 с для всех запросов) или добавьте механизмы для её компенсации, например, кеширование.
Заложите масштабируемость
Масштабируемость — это способность системы обрабатывать возрастающую нагрузку без влияния на производительность, либо способность легко увеличить эту производительность.
- Отдайте предпочтение горизонтальному, а не вертикальному масштабированию;
- Заложите возможность легко добавить больше узлов системы;
- Позвольте балансировать нагрузку между узлами;
- Не перегружайте каждый отдельно взятый узел — распределяйте нагрузку.
Заложите тестируемость
Тестируемость — показатель того, насколько хорошо система или её компоненты позволяют создавать требования для тестирования и проводить тесты, чтобы определить, выполняются ли эти требования.
- Внедрите в систему механизмы для имитации данных;
- Убедитесь, что процессы, работающие с наборами данных, быстро обрабатывают наборы небольшого размера;
- Добавьте в приложение возможность автоматизации тестирования интерфейса.
Внедрите интероперабельность
Насколько хорошо ваша система взаимодействует с другими? Коммуникационные протоколы, интерфейсы и форматы данных являются ключевыми аспектами интероперабельности. Стандартизация также является важным аспектом, на который нужно обратить внимание при разработке интероперабельной системы.
- По возможности используйте открытые стандарты;
- Если это по какой-то причине невозможно, то опубликуйте используемые стандарты;
- Чем больше сторонних систем поддерживает ваше приложение, тем лучше.
Обеспечьте прозрачность и устранение неполадок
Когда что-то идёт не так, насколько легко проследить ошибку и воспроизвести её?
- Журналируйте все ошибки и важные события;
- Сделайте трассировку стека простой для понимания;
- Включайте в лог все данные, необходимые для повторного воспроизведения ошибки;
- Добавьте возможность включения/выключения отладочных логов;
- Сделайте так, чтобы течение процесса, вызвавшего ошибку, можно было легко проследить через всё приложение.
Используйте популярные фреймворки
У сторонних библиотек, которые вы используете, должно быть активное сообщество. Чем больше у продукта или фреймворка сообщество, тем проще будет с ним работать, так как, скорее всего, многие проблемы уже решили до вас другие пользователи.
Характеристики социально активного приложения:
- Множество плагинов и проектов с открытым исходным кодом, связанных с фреймворком;
- Активный репозиторий на GitHub, если библиотека c открытым исходным кодом;
- Много вопросов и ответов на StackOverflow;
- Множество книг, блогов и руководств.
Сделайте развёртывание максимально простым
Развёртывание и распространение в разных окружениях дорого обходится. Продукт, который трудно развернуть, требует более длительных циклов релиза и затрудняет реагирование на внесение изменений или исправление ошибок.
- Добавьте автоматическое развёртывание по сценарию;
- Упростите процесс написания автоматизированных тестов;
- Минимизируйте время сборки системы;
- Минимизируйте физический размер системы;
- Упростите откат системы, чтобы облегчить себе жизнь, если что-то пойдёт не так.
При проектировании вашего приложения пройдитесь по этому списку и посмотрите, сможете ли вы поставить галочку напротив как можно большего количества пунктов. Если вы будете учитывать все эти советы при создании своего приложения, то в итоге получите лучший результат.
15К открытий15К показов