Поделитесь опытом.
Пытаюсь понять, как правильно выстраивать архитекутуру масштабируемого приложения, которое находится в стадии пилота и как следствие, имеет большое количество правок и изменений на лету.
Для достижения минимальной связанности между пакетами в Go, я хочу использовать интерфейсы(нужно ли это вообще?).
Есть ряд пакетов.
Sender - структура, которая будет использоваться во множестве других пакетов(например, отправка отп кода через email или смс).
package otp
type Sender struct {
// поля
}
func (s *Sender) SendWithInterval() {
// реализация
}
// Интерфейс - контракт.
type OtpSender interface {
SendWithInterval()
}
Где правильно хранить интерфейс с методами этой структуры?
- в пакетах где будет использоваться Sender.
- создать пакет common, например, с файлом otp_sender.go, чтобы избежать дублирование кода.
Какой из методов выше лучше и как выбрать правильный из них?
package packageB
import (
" /import/path"
)
func SomeFunction(s OtpSender) {
s.SendWithInterval()
}
package packageС
import (
"/import/path"
)
func SomeFunction(s OtpSender) {
s.SendWithInterval()
}