Задать вопрос
@SilentGr0ve
Первокурсник

Насколько сильно стоит завязываться на абстракции на примере репозитория?

В рамках написания проекта дошел до описания пула БД. В момент изучения темы встал вопрос, есть ли смысл в полной абстракции от БД. Что я имею в виду:
Первый пример.
Интерфейс пула запрашивает необходимые методы, которые завязаны на конкретной реализации pgx.
type DBPool interface {
    QueryRow(ctx context.Context, sql string, args ...any) pgx.Row
    Query(ctx context.Context, sql string, args ...any) (pgx.Rows, error)
    Exec(ctx context.Context, sql string, args ...any) (pgconn.CommandTag, error)
}


А второй пример заключается в том, что мы будем в методах интерфейса возвращать стандартные типы, не завязанные на какой-либо конкретной реализации.

В связи с чем я задаюсь вопросом. Приходилось ли Вам опираться на полную абстракцию? Есть ли какой-то весомый выигрыш от этого в разработке?

Заранее извиняюсь в возможных неточностях моего объяснения, так как сам еще "плаваю" в этой теме
  • Вопрос задан
  • 198 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Go-разработчик с нуля + нейросети
    9 месяцев
    Далее
  • Яндекс Практикум
    Go-разработчик с нуля
    8 месяцев
    Далее
  • Академия Эдюсон
    GO-разработчик: тариф PRO
    4 месяца
    Далее
Решения вопроса 1
opium
@opium
Просто люблю качественно работать
Интерфейс с pgx-типами — это не абстракция от БД, это просто обёртка. Реально нужно абстрагироваться выше: пусть репозиторий возвращает доменные структуры (GetUser(ctx, id) (User, error)), тогда pgx остаётся скрытым внутри. Делать DB-агностичный пул «на всякий случай» это YAGNI, смысл только если есть реальная вторая реализация.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Dhwtj
На абстракции надо завязываться настолько насколько вам/команде потом будет удобно с этим работать, мыслить, насколько часто придется менять.
Если в планах есть переход на другую БД или есть такой риск и заказчик оплатит ресурсы делать абстракцию, то делайте. Иначе, не делайте.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы