Примечание: в основном относится к разработке HTTP-API и веб-разработке в целом.
В C # и Java у нас есть шаблон DTO, с точки зрения непрофессионала, это просто класс, который иногда "специфичен для домена"также называется «просмотр модели» (отправляется по сети).Так, например, наш DTO для входа в систему будет выглядеть примерно так: LoginParams
с именем пользователя и паролем (только).
Или, скажем, CreateUserRequest
, который содержит свойства, необходимые только для этой конкретной операции (для создания пользователя мынапример, идентификатор не нужен) и отдельный DTO для ответа (CreateUserResponse
или просто User
).
Он также используется для скрытия определенных свойств от сериализации или потому, что модель API слишком сильно отличаетсяиз нашего домена или модели данных.
Итак, рассмотрим модель User
со свойством, подобным hashed_password
, очевидно, мы не хотим возвращать hashed_password
клиенту нашего HTTP API, потому что об этом должен знать только сервер.Поэтому для этой цели у нас есть отдельный класс UserDto
или UserResponseModel
со свойствами, которые мы хотим отправить пользователю API.
Automapper и аналогичные библиотеки обычно используются для упрощения этого процесса путем сопоставления одного объекта сдругой для нас.
Я где-то читал, что этот шаблон в Golang отсутствует, и, как правило, неправильно применять шаблоны C # и Java к таким языкам, как Go (??).
Еслиэто правда, как вы отделяете свои модели данных и / или модели предметной области от своих моделей API?