HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Представьте мобильное приложение для туризма. В нем пользователь может изучать карту местности и:</p>
1 <p>Представьте мобильное приложение для туризма. В нем пользователь может изучать карту местности и:</p>
2 <ul><li>Создавать записи о местах, которые хочет посетить</li>
2 <ul><li>Создавать записи о местах, которые хочет посетить</li>
3 <li>Просматривать информацию о городах и достопримечательностях</li>
3 <li>Просматривать информацию о городах и достопримечательностях</li>
4 <li>Исправлять информацию о достопримечательностях</li>
4 <li>Исправлять информацию о достопримечательностях</li>
5 <li>Удалять записи о местах, которые больше не хочется посетить</li>
5 <li>Удалять записи о местах, которые больше не хочется посетить</li>
6 </ul><p>Другой пример - вы администратор художественной онлайн-галереи. Вам необходимо:</p>
6 </ul><p>Другой пример - вы администратор художественной онлайн-галереи. Вам необходимо:</p>
7 <ul><li>Создавать записи о новых художниках и их работах</li>
7 <ul><li>Создавать записи о новых художниках и их работах</li>
8 <li>Просматривать информацию об экспонатах</li>
8 <li>Просматривать информацию об экспонатах</li>
9 <li>Редактировать информацию о художниках и экспонатах</li>
9 <li>Редактировать информацию о художниках и экспонатах</li>
10 <li>Удалять записи о работах, которые убрали из галереи</li>
10 <li>Удалять записи о работах, которые убрали из галереи</li>
11 </ul><p>В этих сценариях прослеживаются базовые действия: создание, чтение, обновление и удаление. Они известны как<strong>CRUD</strong>(<strong>C</strong><em>reate<strong>R</strong></em>ead<strong>U</strong>*pdate<strong>D</strong>elete).</p>
11 </ul><p>В этих сценариях прослеживаются базовые действия: создание, чтение, обновление и удаление. Они известны как<strong>CRUD</strong>(<strong>C</strong><em>reate<strong>R</strong></em>ead<strong>U</strong>*pdate<strong>D</strong>elete).</p>
12 <p>В этом уроке мы изучим каждую из операций CRUD. Вы разберетесь в особенностях создания, чтения, обновления и удаления. Также вы узнаете, как тестировать CRUD на примере сервиса Яндекс.Карты.</p>
12 <p>В этом уроке мы изучим каждую из операций CRUD. Вы разберетесь в особенностях создания, чтения, обновления и удаления. Также вы узнаете, как тестировать CRUD на примере сервиса Яндекс.Карты.</p>
13 <h2>Особенности CRUD</h2>
13 <h2>Особенности CRUD</h2>
14 <p>Сначала разберем каждую операцию CRUD в отдельности. Все операции связаны друг с другом. Например, мы не можем получить доступ к удаленному товару или удалить товар, который еще не создан. Эти вещи кажутся очевидными, но всегда есть вероятность допустить ошибку, что может привести к неожиданным результатам.</p>
14 <p>Сначала разберем каждую операцию CRUD в отдельности. Все операции связаны друг с другом. Например, мы не можем получить доступ к удаленному товару или удалить товар, который еще не создан. Эти вещи кажутся очевидными, но всегда есть вероятность допустить ошибку, что может привести к неожиданным результатам.</p>
15 <h3>Create</h3>
15 <h3>Create</h3>
16 <p>Создание новых данных - ключевая функция всего CRUD. Остальные операции не имеют смысла без создания новой записи в базе данных.</p>
16 <p>Создание новых данных - ключевая функция всего CRUD. Остальные операции не имеют смысла без создания новой записи в базе данных.</p>
17 <p>При создании новой записи важно валидировать данные, как и в любой форме. Подробнее про валидацию вы узнали из урока "Формы".</p>
17 <p>При создании новой записи важно валидировать данные, как и в любой форме. Подробнее про валидацию вы узнали из урока "Формы".</p>
18 <p>Валидация помогает не допустить ошибочные данные в базу и таким образом предотвратить возможные ошибки при чтении. Правильная валидация данных так же обеспечивает защиту от вредоносных значений, которые могут быть добавлены в базу данных.</p>
18 <p>Валидация помогает не допустить ошибочные данные в базу и таким образом предотвратить возможные ошибки при чтении. Правильная валидация данных так же обеспечивает защиту от вредоносных значений, которые могут быть добавлены в базу данных.</p>
19 <h3>Read</h3>
19 <h3>Read</h3>
20 <p>Чтение данных - операция, которая доступна всем пользователям. Зачастую, чтение - единственная операция, которая доступна пользователю без прав администратора. Например, вы и другие студенты Хекслета можете читать этот урок, но отредактировать урок или создать новый не получится.</p>
20 <p>Чтение данных - операция, которая доступна всем пользователям. Зачастую, чтение - единственная операция, которая доступна пользователю без прав администратора. Например, вы и другие студенты Хекслета можете читать этот урок, но отредактировать урок или создать новый не получится.</p>
21 <p>В операции чтения важно контролировать доступ к информации. Пользователь не должен видеть информацию, к которой у него нет доступа. Например, как владелец банковского счета вы можете увидеть только свой баланс, доступа к чужим счетам у вас нет.</p>
21 <p>В операции чтения важно контролировать доступ к информации. Пользователь не должен видеть информацию, к которой у него нет доступа. Например, как владелец банковского счета вы можете увидеть только свой баланс, доступа к чужим счетам у вас нет.</p>
22 <h3>Update</h3>
22 <h3>Update</h3>
23 <p>Операция обновления похожа на создание - с ее помощью мы вносим изменения в базу данных. В случае с обновлением важно корректно сохранять ранее внесенные данные. Например, если вы меняете свой логин на сайте, то при этом не должна затрагиваться информация о пароле и электронной почте.</p>
23 <p>Операция обновления похожа на создание - с ее помощью мы вносим изменения в базу данных. В случае с обновлением важно корректно сохранять ранее внесенные данные. Например, если вы меняете свой логин на сайте, то при этом не должна затрагиваться информация о пароле и электронной почте.</p>
24 <h3>Delete</h3>
24 <h3>Delete</h3>
25 <p>Удаление - последняя операция для CRUD. Она удаляет записи из базы данных, будь то информация о картине или метка на карте.</p>
25 <p>Удаление - последняя операция для CRUD. Она удаляет записи из базы данных, будь то информация о картине или метка на карте.</p>
26 <p>Обычно удаление выполняется после проверки прав доступа к данным. Например, если пользователь не имеет право удалять записи, запрос не сработает. Если право есть, система начинает удалять данные.</p>
26 <p>Обычно удаление выполняется после проверки прав доступа к данным. Например, если пользователь не имеет право удалять записи, запрос не сработает. Если право есть, система начинает удалять данные.</p>
27 <p>С точки зрения реализации удаление делится на два типа:</p>
27 <p>С точки зрения реализации удаление делится на два типа:</p>
28 <ul><li>Физическое - запись стирается из базы данных без возможности восстановления</li>
28 <ul><li>Физическое - запись стирается из базы данных без возможности восстановления</li>
29 <li>Логическое - к записи закрывается доступ на чтение, то есть она скрывается. Доступ всегда можно восстановить при необходимости. Логическое удаление больше похоже на обновление, потому что физически запись в базе данных остается</li>
29 <li>Логическое - к записи закрывается доступ на чтение, то есть она скрывается. Доступ всегда можно восстановить при необходимости. Логическое удаление больше похоже на обновление, потому что физически запись в базе данных остается</li>
30 </ul><h2>Как тестировать CRUD</h2>
30 </ul><h2>Как тестировать CRUD</h2>
31 <p>Попробуем протестировать CRUD-операции вручную. Для этого воспользуемся сервисом Яндекс.Карты, который позволяет создавать списки меток и добавлять интересные точки на карте. Этим сервисом часто пользуются путешественники, чтобы добавить все интересующие их места на карте:</p>
31 <p>Попробуем протестировать CRUD-операции вручную. Для этого воспользуемся сервисом Яндекс.Карты, который позволяет создавать списки меток и добавлять интересные точки на карте. Этим сервисом часто пользуются путешественники, чтобы добавить все интересующие их места на карте:</p>
32 <p>Представим, что нам нужно протестировать эту функциональность и проверить корректность создания списка, его обновления, чтения и удаления.</p>
32 <p>Представим, что нам нужно протестировать эту функциональность и проверить корректность создания списка, его обновления, чтения и удаления.</p>
33 <p>Тестировать будем по такому сценарию:</p>
33 <p>Тестировать будем по такому сценарию:</p>
34 <ol><li>Создать список</li>
34 <ol><li>Создать список</li>
35 <li>Добавить две точки на карте</li>
35 <li>Добавить две точки на карте</li>
36 <li>Проверить их отображение в списке</li>
36 <li>Проверить их отображение в списке</li>
37 <li>Удалить список</li>
37 <li>Удалить список</li>
38 </ol><h3>Cоздание списка</h3>
38 </ol><h3>Cоздание списка</h3>
39 <p>Создадим новый список и назовем его "Отпуск":</p>
39 <p>Создадим новый список и назовем его "Отпуск":</p>
40 <p>Здесь мы видим операцию создания - в нашей учетной записи появляется новый список. Этот список доступен только для нашей учетной записи.</p>
40 <p>Здесь мы видим операцию создания - в нашей учетной записи появляется новый список. Этот список доступен только для нашей учетной записи.</p>
41 <p>Он позволяет проводить остальные операции по CRUD:</p>
41 <p>Он позволяет проводить остальные операции по CRUD:</p>
42 <ul><li>Чтение списка</li>
42 <ul><li>Чтение списка</li>
43 <li>Обновление записей в списке - добавление или удаление точек на карте</li>
43 <li>Обновление записей в списке - добавление или удаление точек на карте</li>
44 <li>Удаление списка</li>
44 <li>Удаление списка</li>
45 </ul><h3>Добавление точек в список</h3>
45 </ul><h3>Добавление точек в список</h3>
46 <p>Теперь попробуем обновить список. Добавим две точки на карте:</p>
46 <p>Теперь попробуем обновить список. Добавим две точки на карте:</p>
47 <p>На этом шаге мы обновили список. Обратите внимание, что обновляется только список. Сами точки на карте - это лишь часть списка, они не изменяются. Филиал Третьяковской галереи и информация о нем никак не изменится от того, что мы добавили точку в наш список.</p>
47 <p>На этом шаге мы обновили список. Обратите внимание, что обновляется только список. Сами точки на карте - это лишь часть списка, они не изменяются. Филиал Третьяковской галереи и информация о нем никак не изменится от того, что мы добавили точку в наш список.</p>
48 <h3>Проверка точек в списке</h3>
48 <h3>Проверка точек в списке</h3>
49 <p>Проверим, что точки добавились корректно. Для этого перейдем в список "Отпуск":</p>
49 <p>Проверим, что точки добавились корректно. Для этого перейдем в список "Отпуск":</p>
50 <p>Здесь мы производим операцию чтения. Во время тестирования мы проверяем, точно ли все данные выведены на экране. Пользователь должен увидеть:</p>
50 <p>Здесь мы производим операцию чтения. Во время тестирования мы проверяем, точно ли все данные выведены на экране. Пользователь должен увидеть:</p>
51 <ul><li>Изображения точек</li>
51 <ul><li>Изображения точек</li>
52 <li>Количество точек</li>
52 <li>Количество точек</li>
53 <li>Каждая точка в отдельности</li>
53 <li>Каждая точка в отдельности</li>
54 </ul><p>Важно проверить, что чтение списка доступно только создателю или тем, кому открыт доступ на чтение списка.</p>
54 </ul><p>Важно проверить, что чтение списка доступно только создателю или тем, кому открыт доступ на чтение списка.</p>
55 <h3>Удаление категории</h3>
55 <h3>Удаление категории</h3>
56 <p>После проверки списка на чтения осталось его удалить:</p>
56 <p>После проверки списка на чтения осталось его удалить:</p>
57 <p>Удаление списка стирает не только список, но и все точки на карте, связанные с этим списком. Важно, чтобы точки на карте не были привязаны к несуществующему списку.</p>
57 <p>Удаление списка стирает не только список, но и все точки на карте, связанные с этим списком. Важно, чтобы точки на карте не были привязаны к несуществующему списку.</p>
58 <p>Еще одна особенность - подтверждение удаления. Это сделано, чтобы случайно не удалить категорию:</p>
58 <p>Еще одна особенность - подтверждение удаления. Это сделано, чтобы случайно не удалить категорию:</p>
59 <p>Такой подход часто критикуется, хотя этот вопрос лежит уже в области дизайна и взаимодействия с пользователем. Если кнопка подтверждения есть, то стоит проверить, что список не удаляется до подтверждения.</p>
59 <p>Такой подход часто критикуется, хотя этот вопрос лежит уже в области дизайна и взаимодействия с пользователем. Если кнопка подтверждения есть, то стоит проверить, что список не удаляется до подтверждения.</p>
60 <h2>Выводы</h2>
60 <h2>Выводы</h2>
61 <p>В этом уроке мы разобрали механизм, который называется CRUD. Он состоит из четырех базовых операций, которые происходят в базе данных:</p>
61 <p>В этом уроке мы разобрали механизм, который называется CRUD. Он состоит из четырех базовых операций, которые происходят в базе данных:</p>
62 <ul><li>Create - создание</li>
62 <ul><li>Create - создание</li>
63 <li>Read - чтение</li>
63 <li>Read - чтение</li>
64 <li>Update - обновление</li>
64 <li>Update - обновление</li>
65 <li>Delete - удаление</li>
65 <li>Delete - удаление</li>
66 </ul><p>Каждая из этих операций обладает своими особенностями и зачастую связана с проверкой прав доступа к той или иной операции. Например, студенты Хекслета могут только читать урок, тогда как сотрудники - обновлять уроки и удалять их.</p>
66 </ul><p>Каждая из этих операций обладает своими особенностями и зачастую связана с проверкой прав доступа к той или иной операции. Например, студенты Хекслета могут только читать урок, тогда как сотрудники - обновлять уроки и удалять их.</p>
67 <p>Во время ручного тестирования CRUD мы воссоздаем сценарий использования сайта и проверки всех операций. Этот сценарий называют<strong>"путь пользователя"</strong>.</p>
67 <p>Во время ручного тестирования CRUD мы воссоздаем сценарий использования сайта и проверки всех операций. Этот сценарий называют<strong>"путь пользователя"</strong>.</p>