Pull to refresh

Comments 4

Ой столько проблем с этими DTO... По 10 прокси методов необходимо лишь бы перегнать в нужный формат

type deliveryClient interface {
	Create(ctx context.Context, t time.Time, orderId string) (trackId string, err error)
}

Ну наконец-то увидел правильное использование интерфейсов в Go по месту использования. А то постоянно делают мало того что глобальными суперинтерфейсами, так еще и в пакет реализации засовывают.

И постоянное у всех вижу использование Repository и с методами не как для работы с коллекцией и определенной для 1 сущности. Смотришь по методам — там или DAO, или типичный Storage, но никак не репозиторий. Даже не знаю, почему так упорно везде пытаются пихать Repository. 

И лично мне не нравится, что из пакета постоянно структуру делают экспортируемой. Да, я в курсе, что даже Goland IDE ругается на это (с чего ли?), и все так делают. Но когда из пакета торчат только разрешенные методы, мы снижаем случайно в другом пакете сделать жесткую зависимость и со временем превратить проект в «комок грязи» по "чистой архитектуре" с папочками по ДДД. 

А так все по делу изложено и логично.

При таком решении поля объекта становятся публичными и надо договориться в команде не злоупотреблять этим.

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

type OrderData struct {
	Id        string
	Status    string
	TrackId   string
	CreatedAt time.Time
	UpdatedAt time.Time
}

type Order struct {
	data OrderData
	delivery deliveryClient
}

func NewOrder(data OrderData, delivery deliveryClient) *Order {
	return &Order{
		data: data,
		delivery:  delivery,
	}
}

Я делаю это, чтобы не писать дополнительных геттеров. Защищаться от программиста дело неблагодарное, а соблюдать правила ради правил утомительно. Если вы пишете публичную библиотеку, то можете реализовать метод `Data() OrderData` и возвращать копию состояния, гарантируя чтобы в ней не оказалось указателей на исходные данные. Но по мне проще принять несовершенство мира и сосредоточится на решении действительно важных проблем.

Sign up to leave a comment.

Articles