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 ответов

21 просмотр

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

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 апдейт без проверки существования)

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта