Автор оригинала: FreeCodeCamp Community Member.
Иллией Колодиажны
Недавно я построил веб-приложение со сложным динамическим пользовательским интерфейсом (UI). По пути я узнал несколько ценных уроков.
Вот несколько советов, которые я хотел бы, чтобы кто-то сказал мне, прежде чем я вступил в такой амбициозный проект. Они спасли бы мне так много времени и здравомыслия.
Знабительный совет № 1: используйте внутреннее состояние компонента для хранения временных данных
Сложный интерфейс обычно требует, чтобы вы поддерживали какое-то состояние приложения. Это говорит UI, что отображать и как отображать его. Одним из вариантов является доступ к этому состоянию, как только пользователь вызывает действие на странице. Тем не менее, я узнал, что есть ситуации, когда это выгодно отложить изменение состояния приложения и сохранить это изменение временно в внутреннем состоянии текущего компонента.
Пример, чтобы проиллюстрировать это диалоговое окно для пользователя для редактирования некоторой записи, например, его или ее имя:
В этом случае вы можете захотеть вызвать изменения каждый раз, когда пользователь редактирует поле в этом диалоговом окне. Но я рекомендую вам поддерживать внутреннее состояние этого диалога со всеми отображаемыми данными. Подождите, пока пользователь не нажимает кнопку Сохранить. На данный момент вы можете безопасно изменить состояние приложения, которое содержит данные этих записей.
Таким образом, если пользователь решит удалить изменение и закрыть диалоговое окно, вы можете отбросить компонент. Тогда состояние приложения остается неповрежденным. Если вам нужно отправить данные на задний конец, вы можете сделать это в одном запросе. Если тот же список доступен для других пользователей, они не увидят временные значения, пока кто-то его редактирует.
Когда пользователи работают с диалоговом окном, они не будут рассмотреть запись завершенной до тех пор, пока они не закончат редактировать его. Функциональность компонента должна работать точно такое.
Примечание для тех, кто работает с React/Redux: Это поведение достижимо, если вы сохраните общие данные в магазине Redux и используете состояние React Component для хранения временных деталей данных.
Злоитовой совет № 2: Отдельные модели моделей из штата UI
Я использую термин модель Здесь относится к классическому объекту из шаблона MVC.
Современный интерфейс в веб-приложениях может быть сложным в структуре и поведении. Это, как правило, приводит вас к хранению чисто связанных с UI данных в вашем состоянии приложения. Я рекомендую сохранить данные, связанные с пользователем данных и бизнес-данные.
Этот подход легче следовать и понимать, поскольку он отделяет бизнес-логику от всего остального. Ваши модели могут проводить как данные, так и методы (функции, средства) для обработки этих данных. В противном случае ваша заявка, вероятно, в конечном итоге с распространением бизнес-логики по нескольким местам, скорее всего Вид компоненты.
Например, у вас есть список для выполнения задач в вашем приложении, и вы реализуете страницу, чтобы добавить новую задачу в этот список. Вы хотите отключить кнопку «Сохранить», пока не будет описание, объясняющее задачу, так и правильно отформатированную дату для задачи:
Наивный путь будет хранить необходимые данные где-то в состоянии приложения и иметь код, как const savebuttidisabled =! Описание &&! Дата &&! Дата IsValid (дата) прямо в вашем Вид составная часть. Но проблема в том, что кнопка сохранения отключена, потому что есть Бизнес требование иметь все записи с описаниями и правильными датами.
Так что в этом случае логика для отключения кнопки должна быть помещена в Модель Для задачи на договор. Эта модель может выглядеть так:
{ description: 'Save Gotham', date: 'NOW', notes: 'Speak with deep voice', dateIsValid: () => this.date === 'NOW', isValid: () => this.description !== '' && this.dateIsValid()}И теперь вы можете использовать это для вашей пользовательской логики Mogic const savebuttidisabled =! task.svalid () В Вид составная часть.
Как видите, этот совет в основном о сохранении вашего Модели отдельно от Виды в шаблоне MVC.
Знабительный совет № 3: Приоритеты тестирования интеграции над тестированием устройства
Это не проблема, если вам повезло работать в среде, где у вас есть время, чтобы написать несколько тестов для каждой функции. Но я уверен, что это не так для большинства из нас. Обычно вы должны решить, какое тестирование на использование. Большинство времени я бы рассмотрел тестирование интеграции более ценным, чем тестирование единиц Отказ
По моему опыту я узнал, что кодовая база с хорошим тестовым покрытием единиц, как правило, более подвержена ошибкам, чем тот, который с хорошим тестом интеграции. Я заметил, что большинство ошибок, введенных с развивающимися работами, являются регрессионные ошибки . И единичные тесты обычно не очень хорошо ловить их.
Когда вы исправляете проблему в коде, я бы побудил вас следовать этим простым шагам:
- Напишите тест, который не удается из-за существующей проблемы. Если это можно сделать с помощью модульного теста, отлично. В противном случае сделайте тестовый прикосновение как многие кодовые модули по мере необходимости.
- Исправьте проблему в кодовой базе.
- Убедитесь, что тест больше не справится.
Эта простая практика гарантирует, что проблема исправлена, и она не произойдет снова, так как тест проверит его.
Современные веб-приложения представляют множество проблем разработчикам и разработке пользовательского интерфейса является одним из них. Я надеюсь, что эта статья поможет вам избежать ошибок или дать вам хорошую тему подумать и обсудить.
Я бы очень ценю читаю свои мысли и открытия в комментариях.
Оригинал: “https://www.freecodecamp.org/news/3-tips-to-keep-in-mind-while-developing-complex-ui-in-web-b56312310390/”