Задать вопрос
@frty

Как правильно регулировать связанность компонентов?

Поделитесь опытом.
Пытаюсь понять, как правильно выстраивать архитекутуру масштабируемого приложения, которое находится в стадии пилота и как следствие, имеет большое количество правок и изменений на лету.
Для достижения минимальной связанности между пакетами в 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()
}
  • Вопрос задан
  • 194 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 2
@calculator212
структура, которая будет использоваться во множестве других пакетов(например, отправка отп кода через email или смс).
Это можно вынести либо в отдельный проект, либо помещать такое в папку pkg, в которой обычно и лежат переиспользуемые пакеты.
Где правильно хранить интерфейс с методами этой структуры?
Создайте отдельный пакет в том месте где вам удобно, главное чтобы не получилось циклических зависимостей в будущем. Конкретно для вашего случая, можете поискать как реализуют фабрику в го, мне кажется это должно вам помочь.
Ответ написан
Комментировать
yellow79
@yellow79
Senior Software Engineer
Пакет common это антипаттерн для Go.
Интерфейсы принято определять там, где они будут использоваться. В вашем случае в рамках packageB и packageC.
И не стоит переживать по поводу того, что у вас дублирование кода, ведь как сказал классик, маленькая копипаста лучше маленькой зависимости
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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