Skip to content

Conversation

@LostImagin4tion
Copy link
Contributor

No description provided.

Copy link
Member

@rekby rekby left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Привет, спасибо за PR.

Отличная работа - код хорошо читается и прокомментирован.
Сделал несколько комментариев для улучшения познавательной ценности примера для студентов.

// чтобы избежать дублирования при следующем выполнении функции-ретраера
// и вернуть ретраеру ошибку
if err != nil {
clear(result)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

тут и далее про clear

  1. Такую очистку лучше проводить в начале функции - оно одно и очевидное. Ошибок может быть много и тогда пришлось бы повторять это код рядом с каждой ошибкой.
    Цена - лишняя очистка пустого результата на старте функции.

Ещё вариант - сделать результат именованной ошибкой и очистку выполнять в defer если возвращем ошибку.

  1. Использование clear тут тоже создаёт ошибку. result - это слайс, clear для слайсов - зануляет значения всех элементов слайса, но не обнуляет его длину. Тут же - важно обнулить длину слайса, иначе при ретраях получится результат где первые значения нулевые из-за ретраев, а правильный результат начинается с неизвестного индекса в хвосте result.

// чтобы избежать дублирования при следующем выполнении функции-ретраера
// и вернуть ретраеру ошибку
if err != nil {
clear(result)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

... про clear

// Это улучшает тестируемость - можно передать mock-объект для тестов
// 2) Универсальная логика выполнения запросов и чтения результатов
// 3) В методах принимает контекст, который может управлять исполнением запросов (например, через таймаут)
type QueryHelper struct {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вот это я бы убрал - хочется в коде примеров видеть именно код работы с драйвером. В прод-варианте обёртки/хелперы это хорошо, но в учебном курсе лучше оставить это явным: чтобы проще было понять как это работает и как пользоваться самим SDK.

return err
}

materializeFunc(resultSet, ctx)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Такая штука скорее вредная - её сложно понять, к тому же в YDB уже есть свой такой материализатор, если выполнять запрос на query-клиенте.

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

Copy link
Contributor Author

@LostImagin4tion LostImagin4tion Dec 19, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

а точно ли стоит пихать сюда интерактивные транзакции?
это все-таки урок про базовую работу с таблицами, про транзакции там ничего не было

// Репозиторий для работы с тикетами в базе данных YDB
// Реализует операции добавления и чтения тикетов
type IssueRepository struct {
query *QueryHelper
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут нужно избавиться от хелпера

// Репозиторий для управления схемой базы данных YDB
// Отвечает за создание и удаление таблиц
type SchemaRepository struct {
query *QueryHelper
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут нужно избавиться от хелпера и работать с драйвером.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants