Что нужно учесть при проектировании своего приложения

Перед тем, как создавать приложение, необходимо продумать его архитектуру. Как это сделать правильно рассмотрим в статье.

Упростите жизнь разработчикам

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

Что упростит разработчику жизнь:

  • Сделайте приложение максимально простым и понятным;
  • Не перегружате его излишней функциональностью — внедряйте только необходимые фичи;
  • Используйте общепринятый подход к решению задач;
  • Используйте вспомогательные инструменты;
  • Сделайте приложение выразительным — каждая задача, решаемая в нём, должна быть очевидной;
  • Если вы планируете использовать сторонние библиотеки, то позаботьтесь о том, чтобы они были наилучшими.

Чтение по теме: Сначала — монолит, или правильный путь к микросервисной архитектуре

Уделите внимание мелочам

  • Решайте все задачи, поставленные перед проектом, последовательно;
  • Сделайте так, чтобы самые часто встречающиеся задачи выполнялись проще и прозрачней других;
  • Сделайте приложение легкорасширяемым;
  • Сделайте его настолько простым, насколько это возможно;

Помните о юзабилити

архитектура

Уровень юзабилити жизненно важен по ряду причин. Он повышает доверие и удовлетворённость клиентов и снижает затраты.

  • Исключите из приложения технологии, специфичные для конкретного поставщика;
  • Ваше приложение должно поддерживать последние стандарты;
  • Обеспечьте приложению быстрый отклик;
  • Ваше приложение должно по максимуму использовать графические возможности;
  • Добавьте анимацию там, где это уместно;
  • Добавьте поддержку A/B тестирования;
  • Включите в приложение поддержку аналитики.

Обеспечьте безопасность

архитектура

Безопасность — это способность системы снизить вероятность злонамеренных или случайных действий за пределами ожидаемого использования системы и предотвратить раскрытие или потерю информации.

  • Проходите сторонние пентесты;
  • Внедряйте стандарты безопасности везде, где это возможно;
  • Следуйте лучшим практикам безопасности.

Обеспечьте надёжность

архитектура

Надёжность — это способность системы продолжать работать ожидаемым образом с течением времени. Надёжность измеряется как вероятность того, что система не даст сбой и что она будет выполнять свои функции в течение заданного интервала времени.

  • Очевидно, что в системе не должно происходить сбоев, но всё же они происходят. Нужно обеспечить журналирование и анализ таких сбоев;
  • Система должна быть максимально автономной — если произошёл сбой, будет идеально, если она сама с этим справится;

С умом подходите к производительности

  • Обеспечьте приложению уровень производительности, соответствующий вашей задаче и возможностям. Иногда увеличение производительности может слишком дорого стоить с точки зрения затрачиваемых человеческих и аппаратных ресурсов. Если производительность для ваших задач не критична, не стоит на этом зацикливаться;
  • Минимизируйте задержку до появления интерфейса (< 250 мс для 90% запросов, < 2 с для всех запросов) или добавьте механизмы для её компенсации, например, кеширование.

Заложите масштабируемость

архитекутра

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

  • Отдайте предпочтение горизонтальному, а не вертикальному масштабированию;
  • Заложите возможность легко добавить больше узлов системы;
  • Позвольте балансировать нагрузку между узлами;
  • Не перегружайте каждый отдельно взятый узел — распределяйте нагрузку.

Заложите тестируемость

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

  • Внедрите в систему механизмы для имитации данных;
  • Убедитесь, что процессы, работающие с наборами данных, быстро обрабатывают наборы небольшого размера;
  • Добавьте в приложение возможность автоматизации тестирования интерфейса.

Внедрите интероперабельность

Насколько хорошо ваша система взаимодействует с другими? Коммуникационные протоколы, интерфейсы и форматы данных являются ключевыми аспектами интероперабельности. Стандартизация также является важным аспектом, на который нужно обратить внимание при разработке интероперабельной системы.

  • По возможности используйте открытые стандарты;
  • Если это по какой-то причине невозможно, то опубликуйте используемые стандарты;
  • Чем больше сторонних систем поддерживает ваше приложение, тем лучше.

Обеспечьте прозрачность и устранение неполадок

Когда что-то идёт не так, насколько легко проследить ошибку и воспроизвести её?

  • Журналируйте все ошибки и важные события;
  • Сделайте трассировку стека простой для понимания;
  • Включайте в лог все данные, необходимые для повторного воспроизведения ошибки;
  • Добавьте возможность включения/выключения отладочных логов;
  • Сделайте так, чтобы течение процесса, вызвавшего ошибку, можно было легко проследить через всё приложение.

Используйте популярные фреймворки

У сторонних библиотек, которые вы используете, должно быть активное сообщество. Чем больше у продукта или фреймворка сообщество, тем проще будет с ним работать, так как, скорее всего, многие проблемы уже решили до вас другие пользователи.

Характеристики социально активного приложения:

  • Множество плагинов и проектов с открытым исходным кодом, связанных с фреймворком;
  • Активный репозиторий на GitHub, если библиотека c открытым исходным кодом;
  • Много вопросов и ответов на StackOverflow;
  • Множество книг, блогов и руководств.

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

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

  • Добавьте автоматическое развёртывание по сценарию;
  • Упростите процесс написания автоматизированных тестов;
  • Минимизируйте время сборки системы;
  • Минимизируйте физический размер системы;
  • Упростите откат системы, чтобы облегчить себе жизнь, если что-то пойдёт не так.

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

Перевод статьи «12 Attributes of a Good Web Application Architecture»

Подобрали три теста для вас:
— А здесь можно применить блокчейн?
Серверы для котиков: выберите лучшее решение для проекта и проверьте себя.
Сложный тест по C# — проверьте свои знания.

Также рекомендуем: