Возвращаете ли вы ObjectResult из своего хранилища в ASP.Net Core - PullRequest
1 голос
/ 23 октября 2019

В приложении ASP.NET Core я использую Task<IActionResult> на подавляющем большинстве маршрутов моего контроллера. Однако я также пытаюсь использовать репозитории. Такие вещи, как NotFound() или Ok(ret), которые должен вернуть контроллер, недоступны в хранилище.

Я начал работу с хранилищем, когда эти методы возвращали Task<ObjectResult>, поскольку он прошел бы черезконтроллер, но потом я быстро обнаружил, что многие из "нормальных", которых я хотел бы, не существуют. Например, мне нужно было сделать свои собственные CreateObjectResult, NoContentObjectResult и т. Д. *

Есть ли лучший тип для возврата, чтобы мои методы хранилища могли легко возвращать либо данные, либо соответствующий ответ об ошибке?

1 Ответ

1 голос
/ 24 октября 2019

В идеале, хранилище должно возвращать Доменную модель в случае реализации DDD. В этом случае сама доменная модель отображается как сущность.

Если DDD не реализован, она должна возвращать сопоставляемую сущность.

Репозиторий должен учитывать только потребности базы данных. Он не должен обрабатывать любые другие проблемы, такие как HTTP, бизнес-логика и т. Д. Следовательно, он не должен возвращать ObjectResult или DTO или любой другой тип, который не относится к доступу к данным. Чтобы узнать больше о таких терминах, как DTO, Entity и т. Д., Пожалуйста, обратитесь к этому ответу.

Я также пытаюсь использовать репозитории. Такие вещи, как NotFound() или Ok(ret), которые должен вернуть контроллер, недоступны в хранилище.

Они не должны. Используйте дополнительную логику для реализации этого вне хранилища.;

Есть ли лучший тип для возврата, чтобы мои методы хранилища могли легко возвращать либо данные, либо соответствующий ответ об ошибке?

Как сказано выше, верните сопоставленные объекты. Для ошибок рассмотрите выбрасывание исключения из хранилища. Обработайте их в коде вызова (контроллера).

На всякий случай, если вы используете полный ORM, взгляните на этот ответ.

...