структуру?
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
}
Потому что человек, который это писал так решил. А почему нет? Ну и во входных параметрах это удобнее — не нужно каждый раз на нил проверять
Слайс может быть nil
Слайс не нужно на нил проверять, его нужно проверять на нулевую длину
По мне, само api избыточно, т.к. Create/Update можно объединить, как из всякие Get
не всегда, в случае create например надо вернуть ошибку, если нарушена уникальность
А зачем их объединять?
Меньше API и проще расширять. Фактически, всё можно упаковать в 3 метода: Search, Update, Delete.
Только вот внутри у тебя всё тоже самое. Тогда можно засунуть в метод Sync и приводить к переданному состоянию (привет, декларативный подход). С точки зрения пользователя Create и Update обычно отличаются (хоть и не всегда)
А когда/чем отличаются? (не холивара ради, если что)
Ну грубо говоря, как и говорили выше — создание подразумевает возможность конфликта, например. Ну и если это (предположим) создание пользователя с OAuth — там создание вообще включает в себя работу с внешней системой, в отличие от обновления. Могут быть разные пермишены — для создания, например, может быть нужно больше прав, чем для обновления себя самого. Но это опять же, зависит от того, что именно создаём и логики приложения.
Согласен, но возврат ошибки из-за конфликта мало чем отличается от ситуации когда мы пытаемся апдейтить несуществующее. А Create+Update в одном методе нужен, например, когда нам надо поведение "либо обнови существующее, либо создай".
Ну если ты на уровне http api разводишь эти случаи (409 и 400, например), то отличаются. А апдейт несуществующего может и не упасть, если у тебя внутри sql апдейт без проверки существования)
Обсуждают сегодня