Size: a a a

2020 June 06

Н

Никита in Go-go!
V L
Не просто вынести, а  оставить только необходимый контроллеру интерфейс. Тогда вам будет легче написать юнит тест с моком на несколько методов, а не на весь storage.
В интерфейсе только те методы, которые контроллер и использует. Возможно я не понимаю что вы имеете ввиду под необхрдимыми
источник

VL

V L in Go-go!
У вас сейчас маленький проект с несколькими сценариями, как только вы его начнёте расширять и покрывать тестами, то думаю поймёте о чем я.
источник

Н

Никита in Go-go!
А, я понял. возможно речь о методе Performer, где конкретно привязка к реализации
источник

Н

Никита in Go-go!
Сейчас это набор методов, которые доступны контроллеру. Помимо Performer, который явно лишний, не совсем понимаю, что ему еще не нужно.
источник

Н

Никита in Go-go!
V L
У вас сейчас маленький проект с несколькими сценариями, как только вы его начнёте расширять и покрывать тестами, то думаю поймёте о чем я.
То есть мы можем разбить Storage на отдельные структуры, типа NotesStorage, со своими интерфейсами. Потом каждый этот новый сторедж добавить в контроллер. И дергать в юзкейсах только те стореджи, что нужны. Верно?
источник

/

/dev/null in Go-go!
@floyernick
>export DATABASE_URL='postgres://postgres:postgres@localhost:5432/awesome?sslmode=disable'

не URL а DSN
источник

Н

Никита in Go-go!
Никита
То есть мы можем разбить Storage на отдельные структуры, типа NotesStorage, со своими интерфейсами. Потом каждый этот новый сторедж добавить в контроллер. И дергать в юзкейсах только те стореджи, что нужны. Верно?
Тут у меня общий контроллер на все юзкейсы. Насколько я помню, у Мартина под каждый юзкейс
источник

VL

V L in Go-go!
Никита
То есть мы можем разбить Storage на отдельные структуры, типа NotesStorage, со своими интерфейсами. Потом каждый этот новый сторедж добавить в контроллер. И дергать в юзкейсах только те стореджи, что нужны. Верно?
Будет лучше, если интерфейсы зависимостей (хранилища) будет определять класс (контроллер).
источник

Н

Никита in Go-go!
V L
Будет лучше, если интерфейсы зависимостей (хранилища) будет определять класс (контроллер).
Да, я сейчас допер о чем вы
источник

Н

Никита in Go-go!
Контроллер вы имеете ввиду – контроллер одного конкретного юзкейса
источник

Н

Никита in Go-go!
Правильно?
источник

AK

Anton Kucherov in Go-go!
Никита
Сейчас это набор методов, которые доступны контроллеру. Помимо Performer, который явно лишний, не совсем понимаю, что ему еще не нужно.
Вот у вас notesStorage более менее пример нормального интерфейса. Он оперирует бизнес моделями и отвязан от какой либо реализации. Т.е. по нему невозможо сказать что за база под этим интерфейсом лежит. SQL там или HTTP сервис... Что хотите то и подставляйте. Сегодня мнонлит и пишем в одну базу, завтра решили кусок унести в отдельный сервис, сели, написали новую реализацию для notesStorage, теперь она работает по HTTP. Остальной код при этом не изменится
источник

Н

Никита in Go-go!
То есть допустим контроллер NotesCreateController. В нем определен интерфейс Storage, который требует только один метод – CreateNote.
источник

/

/dev/null in Go-go!
ты кстати не видишь тут потенциальной проблемы?
источник

/

/dev/null in Go-go!
источник

Н

Никита in Go-go!
Ошибки не чекаю
источник

VL

V L in Go-go!
Никита
То есть допустим контроллер NotesCreateController. В нем определен интерфейс Storage, который требует только один метод – CreateNote.
Имя Storage не говорит о том, что это такое, можно придумать имя лучше.
источник

/

/dev/null in Go-go!
Никита
Ошибки не чекаю
а почему не чекаешь?
источник

p

pragus in Go-go!
Никита
В main.go я кидаю основное. На примере Бд, там находится и реализация сервиса. Да, возможно стоит именовать и такое получше, чтобы было понятно, что в файле.

А вот по поводу storage storage.Storage, тут же интерфейс, и конкретная реализация скрыта для бизнес логики. Поэтому в контроллере такое. Если бы можно было импортировать конкретные структуры с пакета, то объявление выглядело бы менее многословным)
А почему имя структуры совпадает с именем пакета?
источник

p

pragus in Go-go!
Anton Kucherov
storage.Storage - выглядит странно, вот notes.Storage который лежит внутри пакета notes, который используется там же, а реализуется пакетом redis (к примеру) я бы еще понял
+
источник