Conversation
Perederey
left a comment
There was a problem hiding this comment.
Привет
Хорошая базовая структура проекта и тестовое покрытие!
| @@ -0,0 +1,60 @@ | |||
| package storage | |||
internal/handlers/handlers.go
Outdated
| "github.com/srg-bnd/observator/internal/storage" | ||
| ) | ||
|
|
||
| var ( |
There was a problem hiding this comment.
Используй отдельную структуру для обработчиков, чтобы избежать глобальных переменных
internal/middleware/middleware.go
Outdated
|
|
||
| type Middleware func(http.Handler) http.Handler | ||
|
|
||
| func Conveyor(h http.Handler, middlewares ...Middleware) http.Handler { |
There was a problem hiding this comment.
Переименуй в Chain, так обычно это делают в гоу
internal/server/server.go
Outdated
| ) | ||
|
|
||
| var ( | ||
| MemStorage *storage.MemStorage |
There was a problem hiding this comment.
И тут еще, нарушен принцип инверсии зависимостей - сервер не должен знать о конкретной реализации хранилища
internal/services/services.go
Outdated
|
|
||
| // Services | ||
|
|
||
| func UpdateMetricService(metricType, metricName, metricValue string) *Data { |
There was a problem hiding this comment.
И вот тут еще у тебя, слой содержит бизнес-логику смешанную с форматированием данных, надо разделить ответственность
internal/handlers/handlers.go
Outdated
| MemStorage *storage.MemStorage | ||
| ) | ||
|
|
||
| func UpdateMetricHandler(res http.ResponseWriter, req *http.Request) { |
There was a problem hiding this comment.
UpdateMetricHandler содержит слишком много логики. Лучше разделить на валидацию и обработку. Типа такого:
func (h *Handler) UpdateMetricHandler(w http.ResponseWriter, r *http.Request) {
metric, err := h.parseAndValidateMetric(r)
if err != nil {
h.handleError(w, err)
return
}
h.processMetric(w, metric)
}
cmd/server/main.go
Outdated
| "github.com/srg-bnd/observator/internal/storage" | ||
| ) | ||
|
|
||
| var memStorage storage.MemStorage |
There was a problem hiding this comment.
И еще тут напишу, вместо глобальных переменных и init() лучше использовать внедрение зависимостей. Вот так примерно
Как обещал на 1:1 вот код
type App struct {
storage *storage.MemStorage
server *server.Server
}
func NewApp() *App {
storage := storage.NewMemStorage()
return &App{
storage: storage,
server: server.NewServer(storage),
}
}|
@Perederey решил все конфликты и влил в iter2 |
No description provided.