Настройка приемников структуры для использования определенного типа - PullRequest
0 голосов
/ 16 декабря 2018

Я заметил, что во время написания некоторых конечных точек RESTful в Lambda у меня было три модели и обработчики, все они были идентичны.Они принимают запрос, получают некоторые данные из хранилища и возвращают данные в качестве ответа.Единственное, что отличалось в каждой функции-обработчике, это экземпляр модели.Поэтому я думал о способах передачи типа и повторного использования той же функциональности для маршалинга ответа в JSON и т. Д.

Если у меня есть такой шаблон:

type Handler struct {
  model interface{}
  repository
}

func (h *Handler) Fetch(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
  model := h.model
  if err := h.repository.Fetch(id, &model); err != nil {
    return ErrResponse(err, http.StatusInternalServerError)
  }
  return Response(map[string]interface{}{
    "resource": model,
  }, http.StatusOK)
}

Затем вызываю это:

repository := NewRepository(tableName, connection)
handler := &helpers.Handler{repository, new(models.Client)}

Я переназначаю model := h.model, чтобы сама структура не становилась «сохраняющей состояние», в противном случае мне пришлось бы беспокоиться о блокировке, чтобы обеспечить ее потокобезопасность.Поэтому я решил, что могу просто переопределить его в области действия обработчика, чтобы избежать этого.

Кажется, что эта схема работает нормально, но мне было интересно, есть ли потенциальные недостатки или подводные камни?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...