Что учесть при проектировании своего приложения?
Прежде, чем приступить к созданию приложения, нужно продумать его архитектуру. Предлагаем вам 12 советов, которые помогут создать хорошую архитектуру ПО.
1. Упрощаем жизнь разработчикам
Наша задача — оптимизировать продуктивность разработчика, ведь самый ценный ресурс — это человеческий ресурс. Чтобы эту задачу реализовать, следуйте ряду рекомендаций: — не перегружайте приложение излишней функциональностью; — старайтесь использовать общепринятый подход к решению задач; — старайтесь задействовать вспомогательные инструменты; — каждая задача, решаемая приложением, должна быть очевидной.
2. Уделяем внимание мелочам
Фраза о внимании к мелочам звучит банально, но именно поэтому многие из нас не думают о простых и очевидных вещах. Чтобы этого избежать: — последовательно решайте задачи, поставленные перед проектом; — делайте приложение легкорасширяемым; — пусть приложение будет настолько простым, насколько это вообще возможно.
3. Не забываем о юзабилити
Уровень юзабилити очень важен, т. к. повышает удовлетворённость и доверие клиентов, снижает затраты.
Советы: — исключите из приложения те технологии, которые специфичны для конкретного поставщика; — приложение должно поддерживать последние стандарты; — обеспечьте быстрый отклик; — по максимуму используйте графические возможности приложения, однако добавляйте анимацию лишь там, где это уместно; — добавьте поддержку A/B тестирования; — подключите поддержку аналитики.
4. Обеспечиваем безопасность
Зачем нужна безопасность, объяснять не стоит. Чтобы её обеспечить: — проходите сторонние пентесты; — отдавайте предпочтение лучшим практикам безопасности; — внедряйте стандарты безопасности повсюду, где это вообще возможно.
5. Обеспечиваем надёжность
Надёжность — это способность системы работать нужным нам образом и без сбоев в течение необходимого времени. Тут следует обратить внимание на то, что сбои иногда происходят у всех, поэтому информацию о них нужно обязательно записывать для дальнейшего анализа причин.
6. Не забываем про производительность
Да, иногда повышение производительности стоит дорого, но мы обязаны обеспечить тот уровень, который необходим для решения наших задач и соответствует нашим возможностям. Самое малое, что нужно сделать, — минимизировать задержку в пределах < 250 мс для 90 % запросов и < 2 с для всех запросов либо добавить механизмы для её компенсации, к примеру, кеширование.
7. Закладываем масштабируемость
Масштабируемость — это способность системы выполнять обработку возрастающей нагрузки без непосредственного влияния на фактическую производительность (или способность легко и быстро увеличить эту производительность). Чтобы её обеспечить: — отдавайте предпочтение не вертикальному, а горизонтальному масштабированию; — закладывайте возможность легко добавить в систему дополнительные узлы; — балансируйте нагрузку между узлами, распределяйте нагрузку и не перегружайте каждый отдельно взятый узел.
8. Закладываем тестируемость
Важно, чтобы система либо её компоненты могли тестироваться с целью определения, соответствует ли наше приложение необходимым требованиям. Для этого: — внедрите механизмы для имитации данных; — добавьте возможность автоматизации тестирования интерфейса; — процессы, работающие с наборами данных, должны быстро обрабатывать наборы небольших размеров.
9. Внедряем интероперабельность
Хорошо ли созданная вами система взаимодействует с другими? Если нет, то стоит подумать об интероперабельности. Ключевые аспекты интероперабельности — интерфейсы, форматы, коммуникационные протоколы. Не менее важна и стандартизация.
Итак: — старайтесь использовать открытые стандарты, а если это невозможно — опубликуйте стандарты, которые используете; — чем больше сторонних систем поддерживают приложение, тем лучше.
10. Обеспечиваем прозрачность при устранении неполадок
Если возникают проблемы и сбои, задумайтесь, насколько легко отследить ошибку и воспроизвести её? Тут важны следующие моменты: — фиксируйте все ошибки; — пусть трассировка стека будет простой для понимания; — включите в лог все данные, нужные для повторного воспроизведения ошибки; — обеспечьте возможность включения и выключения отладочных логов; — процесс, вызвавший ошибку, должен легко отслеживаться через всё приложение.
11. Применяем популярные фреймворки
Если вы используете сторонние библиотеки, у них должно быть активное сообщество. Чем оно больше, тем проще работать, т. к. большинство проблем, скорее всего, уже было решено до вас другими пользователями.
Признаки активного приложения: — с фреймворком связано много плагинов и проектов, имеющих открытый исходный код; — есть активный репозиторий на GitHub; — есть достаточно много вопросов и ответов на StackOverflow; — можно без проблем найти книги, блоги и руководства.
12. Делаем развёртывание простым
Развёртывание в разных окружениях обходится недёшево. Если продукт трудно развернуть, увеличиваются сроки релиза, затрудняется реагирование на внесение изменений и исправление ошибок.
Советы: — добавьте автоматическое развёртывание по сценарию; — сведите физический размер системы к возможному минимуму; — упростите процесс написания автоматизированных тестов; — упростите откат системы (если что-то пойдёт не так, это значительно облегчит вам жизнь).
По материалам статьи «12 Attributes of a Good Web Application Architecture».