0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Прежде, чем приступить к созданию приложения, нужно продумать его архитектуру. Предлагаем вам 12 советов, которые помогут создать хорошую архитектуру ПО.</p>
1
<p>Прежде, чем приступить к созданию приложения, нужно продумать его архитектуру. Предлагаем вам 12 советов, которые помогут создать хорошую архитектуру ПО.</p>
2
<h2>1. Упрощаем жизнь разработчикам</h2>
2
<h2>1. Упрощаем жизнь разработчикам</h2>
3
<p>Наша задача - оптимизировать продуктивность разработчика, ведь самый ценный ресурс - это человеческий ресурс. Чтобы эту задачу реализовать, следуйте ряду рекомендаций: - не перегружайте приложение излишней функциональностью; - старайтесь использовать общепринятый подход к решению задач; - старайтесь задействовать вспомогательные инструменты; - каждая задача, решаемая приложением, должна быть очевидной.</p>
3
<p>Наша задача - оптимизировать продуктивность разработчика, ведь самый ценный ресурс - это человеческий ресурс. Чтобы эту задачу реализовать, следуйте ряду рекомендаций: - не перегружайте приложение излишней функциональностью; - старайтесь использовать общепринятый подход к решению задач; - старайтесь задействовать вспомогательные инструменты; - каждая задача, решаемая приложением, должна быть очевидной.</p>
4
<h2>2. Уделяем внимание мелочам</h2>
4
<h2>2. Уделяем внимание мелочам</h2>
5
<p>Фраза о внимании к мелочам звучит банально, но именно поэтому многие из нас не думают о простых и очевидных вещах. Чтобы этого избежать: - последовательно решайте задачи, поставленные перед проектом; - делайте приложение легкорасширяемым; - пусть приложение будет настолько простым, насколько это вообще возможно.</p>
5
<p>Фраза о внимании к мелочам звучит банально, но именно поэтому многие из нас не думают о простых и очевидных вещах. Чтобы этого избежать: - последовательно решайте задачи, поставленные перед проектом; - делайте приложение легкорасширяемым; - пусть приложение будет настолько простым, насколько это вообще возможно.</p>
6
<h2>3. Не забываем о юзабилити</h2>
6
<h2>3. Не забываем о юзабилити</h2>
7
<p>Уровень юзабилити очень важен, т. к. повышает удовлетворённость и доверие клиентов, снижает затраты.</p>
7
<p>Уровень юзабилити очень важен, т. к. повышает удовлетворённость и доверие клиентов, снижает затраты.</p>
8
<p>Советы: - исключите из приложения те технологии, которые специфичны для конкретного поставщика; - приложение должно поддерживать последние стандарты; - обеспечьте быстрый отклик; - по максимуму используйте графические возможности приложения, однако добавляйте анимацию лишь там, где это уместно; - добавьте поддержку A/B тестирования; - подключите поддержку аналитики.</p>
8
<p>Советы: - исключите из приложения те технологии, которые специфичны для конкретного поставщика; - приложение должно поддерживать последние стандарты; - обеспечьте быстрый отклик; - по максимуму используйте графические возможности приложения, однако добавляйте анимацию лишь там, где это уместно; - добавьте поддержку A/B тестирования; - подключите поддержку аналитики.</p>
9
<h2>4. Обеспечиваем безопасность</h2>
9
<h2>4. Обеспечиваем безопасность</h2>
10
<p>Зачем нужна безопасность, объяснять не стоит. Чтобы её обеспечить: - проходите сторонние пентесты; - отдавайте предпочтение лучшим практикам безопасности; - внедряйте стандарты безопасности повсюду, где это вообще возможно.</p>
10
<p>Зачем нужна безопасность, объяснять не стоит. Чтобы её обеспечить: - проходите сторонние пентесты; - отдавайте предпочтение лучшим практикам безопасности; - внедряйте стандарты безопасности повсюду, где это вообще возможно.</p>
11
<h2>5. Обеспечиваем надёжность</h2>
11
<h2>5. Обеспечиваем надёжность</h2>
12
<p>Надёжность - это способность системы работать нужным нам образом и без сбоев в течение необходимого времени. Тут следует обратить внимание на то, что сбои иногда происходят у всех, поэтому информацию о них нужно обязательно записывать для дальнейшего анализа причин.</p>
12
<p>Надёжность - это способность системы работать нужным нам образом и без сбоев в течение необходимого времени. Тут следует обратить внимание на то, что сбои иногда происходят у всех, поэтому информацию о них нужно обязательно записывать для дальнейшего анализа причин.</p>
13
<h2>6. Не забываем про производительность</h2>
13
<h2>6. Не забываем про производительность</h2>
14
<p>Да, иногда повышение производительности стоит дорого, но мы обязаны обеспечить тот уровень, который необходим для решения наших задач и соответствует нашим возможностям. Самое малое, что нужно сделать, - минимизировать задержку в пределах < 250 мс для 90 % запросов и < 2 с для всех запросов либо добавить механизмы для её компенсации, к примеру, кеширование.</p>
14
<p>Да, иногда повышение производительности стоит дорого, но мы обязаны обеспечить тот уровень, который необходим для решения наших задач и соответствует нашим возможностям. Самое малое, что нужно сделать, - минимизировать задержку в пределах < 250 мс для 90 % запросов и < 2 с для всех запросов либо добавить механизмы для её компенсации, к примеру, кеширование.</p>
15
<h2>7. Закладываем масштабируемость</h2>
15
<h2>7. Закладываем масштабируемость</h2>
16
<p>Масштабируемость - это способность системы выполнять обработку возрастающей нагрузки без непосредственного влияния на фактическую производительность (или способность легко и быстро увеличить эту производительность). Чтобы её обеспечить: - отдавайте предпочтение не вертикальному, а горизонтальному масштабированию; - закладывайте возможность легко добавить в систему дополнительные узлы; - балансируйте нагрузку между узлами, распределяйте нагрузку и не перегружайте каждый отдельно взятый узел.</p>
16
<p>Масштабируемость - это способность системы выполнять обработку возрастающей нагрузки без непосредственного влияния на фактическую производительность (или способность легко и быстро увеличить эту производительность). Чтобы её обеспечить: - отдавайте предпочтение не вертикальному, а горизонтальному масштабированию; - закладывайте возможность легко добавить в систему дополнительные узлы; - балансируйте нагрузку между узлами, распределяйте нагрузку и не перегружайте каждый отдельно взятый узел.</p>
17
<h2>8. Закладываем тестируемость</h2>
17
<h2>8. Закладываем тестируемость</h2>
18
<p>Важно, чтобы система либо её компоненты могли тестироваться с целью определения, соответствует ли наше приложение необходимым требованиям. Для этого: - внедрите механизмы для имитации данных; - добавьте возможность автоматизации тестирования интерфейса; - процессы, работающие с наборами данных, должны быстро обрабатывать наборы небольших размеров.</p>
18
<p>Важно, чтобы система либо её компоненты могли тестироваться с целью определения, соответствует ли наше приложение необходимым требованиям. Для этого: - внедрите механизмы для имитации данных; - добавьте возможность автоматизации тестирования интерфейса; - процессы, работающие с наборами данных, должны быстро обрабатывать наборы небольших размеров.</p>
19
<h2>9. Внедряем интероперабельность</h2>
19
<h2>9. Внедряем интероперабельность</h2>
20
<p>Хорошо ли созданная вами система взаимодействует с другими? Если нет, то стоит подумать об<strong>интероперабельности</strong>. Ключевые аспекты интероперабельности - интерфейсы, форматы, коммуникационные протоколы. Не менее важна и стандартизация.</p>
20
<p>Хорошо ли созданная вами система взаимодействует с другими? Если нет, то стоит подумать об<strong>интероперабельности</strong>. Ключевые аспекты интероперабельности - интерфейсы, форматы, коммуникационные протоколы. Не менее важна и стандартизация.</p>
21
<p>Итак: - старайтесь использовать открытые стандарты, а если это невозможно - опубликуйте стандарты, которые используете; - чем больше сторонних систем поддерживают приложение, тем лучше.</p>
21
<p>Итак: - старайтесь использовать открытые стандарты, а если это невозможно - опубликуйте стандарты, которые используете; - чем больше сторонних систем поддерживают приложение, тем лучше.</p>
22
<h2>10. Обеспечиваем прозрачность при устранении неполадок</h2>
22
<h2>10. Обеспечиваем прозрачность при устранении неполадок</h2>
23
<p>Если возникают проблемы и сбои, задумайтесь, насколько легко отследить ошибку и воспроизвести её? Тут важны следующие моменты: - фиксируйте все ошибки; - пусть трассировка стека будет простой для понимания; - включите в лог все данные, нужные для повторного воспроизведения ошибки; - обеспечьте возможность включения и выключения отладочных логов; - процесс, вызвавший ошибку, должен легко отслеживаться через всё приложение.</p>
23
<p>Если возникают проблемы и сбои, задумайтесь, насколько легко отследить ошибку и воспроизвести её? Тут важны следующие моменты: - фиксируйте все ошибки; - пусть трассировка стека будет простой для понимания; - включите в лог все данные, нужные для повторного воспроизведения ошибки; - обеспечьте возможность включения и выключения отладочных логов; - процесс, вызвавший ошибку, должен легко отслеживаться через всё приложение.</p>
24
<h2>11. Применяем популярные фреймворки</h2>
24
<h2>11. Применяем популярные фреймворки</h2>
25
<p>Если вы используете сторонние библиотеки, у них должно быть активное сообщество. Чем оно больше, тем проще работать, т. к. большинство проблем, скорее всего, уже было решено до вас другими пользователями.</p>
25
<p>Если вы используете сторонние библиотеки, у них должно быть активное сообщество. Чем оно больше, тем проще работать, т. к. большинство проблем, скорее всего, уже было решено до вас другими пользователями.</p>
26
<p>Признаки активного приложения: - с фреймворком связано много плагинов и проектов, имеющих открытый исходный код; - есть активный репозиторий на GitHub; - есть достаточно много вопросов и ответов на StackOverflow; - можно без проблем найти книги, блоги и руководства.</p>
26
<p>Признаки активного приложения: - с фреймворком связано много плагинов и проектов, имеющих открытый исходный код; - есть активный репозиторий на GitHub; - есть достаточно много вопросов и ответов на StackOverflow; - можно без проблем найти книги, блоги и руководства.</p>
27
<h2>12. Делаем развёртывание простым</h2>
27
<h2>12. Делаем развёртывание простым</h2>
28
<p>Развёртывание в разных окружениях обходится недёшево. Если продукт трудно развернуть, увеличиваются сроки релиза, затрудняется реагирование на внесение изменений и исправление ошибок.</p>
28
<p>Развёртывание в разных окружениях обходится недёшево. Если продукт трудно развернуть, увеличиваются сроки релиза, затрудняется реагирование на внесение изменений и исправление ошибок.</p>
29
<p>Советы: - добавьте автоматическое развёртывание по сценарию; - сведите физический размер системы к возможному минимуму; - упростите процесс написания автоматизированных тестов; - упростите откат системы (если что-то пойдёт не так, это значительно облегчит вам жизнь).</p>
29
<p>Советы: - добавьте автоматическое развёртывание по сценарию; - сведите физический размер системы к возможному минимуму; - упростите процесс написания автоматизированных тестов; - упростите откат системы (если что-то пойдёт не так, это значительно облегчит вам жизнь).</p>
30
<p>По материалам статьи "<a>12 Attributes of a Good Web Application Architecture</a>".</p>
30
<p>По материалам статьи "<a>12 Attributes of a Good Web Application Architecture</a>".</p>
31
31