170 похожих чатов

Такой вопрос, а почему используется структура, а не указатель на

структуру?
type ContactRepository interface {
Create(ctx context.Context, contact model.Contact) (int, error)
GetById(ctx context.Context, contactId int) (model.Contact, error)
GetByType(ctx context.Context, contactType string) ([]model.Contact, error)
GetAll(ctx context.Context) ([]model.Contact, error)
Update(ctx context.Context, contactInput model.Contact) error
Delete(ctx context.Context, contactId int) error
}

12 ответов

10 просмотров

Потому что человек, который это писал так решил. А почему нет? Ну и во входных параметрах это удобнее — не нужно каждый раз на нил проверять

Roman Timofeev
Слайс может быть nil

Слайс не нужно на нил проверять, его нужно проверять на нулевую длину

По мне, само api избыточно, т.к. Create/Update можно объединить, как из всякие Get

Roman Timofeev
По мне, само api избыточно, т.к. Create/Update мож...

не всегда, в случае create например надо вернуть ошибку, если нарушена уникальность

Anton Kachurin
А зачем их объединять?

Меньше API и проще расширять. Фактически, всё можно упаковать в 3 метода: Search, Update, Delete.

Roman Timofeev
Меньше API и проще расширять. Фактически, всё можн...

Только вот внутри у тебя всё тоже самое. Тогда можно засунуть в метод Sync и приводить к переданному состоянию (привет, декларативный подход). С точки зрения пользователя Create и Update обычно отличаются (хоть и не всегда)

Anton Kachurin
Только вот внутри у тебя всё тоже самое. Тогда мож...

А когда/чем отличаются? (не холивара ради, если что)

Roman Timofeev
А когда/чем отличаются? (не холивара ради, если чт...

Ну грубо говоря, как и говорили выше — создание подразумевает возможность конфликта, например. Ну и если это (предположим) создание пользователя с OAuth — там создание вообще включает в себя работу с внешней системой, в отличие от обновления. Могут быть разные пермишены — для создания, например, может быть нужно больше прав, чем для обновления себя самого. Но это опять же, зависит от того, что именно создаём и логики приложения.

Anton Kachurin
Ну грубо говоря, как и говорили выше — создание по...

Согласен, но возврат ошибки из-за конфликта мало чем отличается от ситуации когда мы пытаемся апдейтить несуществующее. А Create+Update в одном методе нужен, например, когда нам надо поведение "либо обнови существующее, либо создай".

Roman Timofeev
Согласен, но возврат ошибки из-за конфликта мало ч...

Ну если ты на уровне http api разводишь эти случаи (409 и 400, например), то отличаются. А апдейт несуществующего может и не упасть, если у тебя внутри sql апдейт без проверки существования)

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

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Добрый день подскажите пожалуйста может кто то сталкивался с ошибками Sentry 22.10.0 развернутым из helm чарт в Kubernetes? Изначально 3 дня назад очень стало много событий ух...
Tire4 Finist Devops
1
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann ٩( 💢•̀ з•́)و Chapmann
19
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
19
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Карта сайта