Senior
Gde treba da se nalazi validacija poslovanja (npr. provera datuma, limit rezervacije od 10 dana)? U handleru ili u servisu?
sobes.tech АИ
Одговор од АИ
Бизнес-валидация, такая как проверка дат или ограничение бронирования на 10 дней, должна находиться в сервисном слое, а не в хендлере. Хендлер отвечает за прием и передачу данных, обработку HTTP-запросов, а сервис — за бизнес-логику и правила. Это позволяет централизовать бизнес-правила, облегчить тестирование и повторное использование логики.
Пример:
func (s *BookingService) CreateBooking(req BookingRequest) error {
if req.EndDate.Sub(req.StartDate).Hours()/24 > 10 {
return errors.New("бронирование не может превышать 10 дней")
}
// другая бизнес-логика
return s.repo.Save(req)
}
// В хендлере просто вызываем сервис
func (h *Handler) CreateBookingHandler(w http.ResponseWriter, r *http.Request) {
var req BookingRequest
// парсим запрос
err := h.service.CreateBooking(req)
if err != nil {
// обработка ошибки
}
}