классы?
Допустим у меня есть пара моделей Order и Item. При создании заказа у меня есть некоторые данные (без id) и список id-шек товаров. Есть некоторый сервисный класс, который выполняет создание заказа.
Варианты которые сформированы у меня в голове:
1) В этот класс я могу передавать недособранный Order, в котором категории без данных, только id-шники (тогда внутри придется создавать еще один экземпляр Order, так как открытые сеттеры делать не очень хорошо)
2) Разделяю заказ на OrderInfo и id-шники коллекций и передаю OrderInfo и IEnumerable<Guid> в сервис
3) Собираю все Item-ы внутри контроллера по их id-шникам, и создаю Order с уже заполненными item-ами, таким образом у меня выходит целостный заказ (без непосредственно своего id)
На скринах концептуальные наброски контроллеров в таком случае
Передавай dto в сервис, там создавай из этого dto объект order, потом сохраняй в бд или что с ним надо делать. Можешь инкапсулировать Order так чтобы его можно было инициализировать только с передачей item'ов и других полей, либо через конструктор, либо через required поля
У тебя CreateOrderDto очень простой, выкини вообще класс, и передавай только данные как аргументы методов. т.е. сервис у тебя будет принимать createdBy и список айдишников
В данном случае это просто пример. Вопрос от части концептуальный. По факту у меня проьлемы появляются если у объекта коллекции хотя бы 2 и полей большее количество полей
Он используется в методе контроллера, то есть мапится с телом запроса. Выкинуть не получится. И вообще там в будущем могут другие поля появится
Спасибо. Попробую так. На самом деле такой вариант даже не рассматривал, так как как-то сказали, что в сервисы dto-шки передавать нельзя, потому что это сильно представление и логику связывает
Ну концептуально это выглядит так. Тебе в сервис нужно передать какие-то данные, но их много или они сложные и поэтому они не помещаются в аргументы метода. Ты создаешь для этого модельку и как-нибудь ее называешь: CreateOrderRequest, CreateOrderCommand или по аналогии и кладешь ее рядом с сервисом. Это моделька часть контракта сервиса, принадлежит ему. Это важно, никаких контроллеров на этом уровне не существует. Дальше в контроллере у тебя есть несколько вариантов. Ты можешь эту модельку принять как аргумент у action-а и прокинуть в сервис. Если тебя не устраивает эта моделька (например у тебя там userid который нужно вытащить из токена), то в контроллере ты создаешь отдельные dto, в них принимаешь то, что должно приходить снаружи, и мапишь их в модельки сервиса. Эти dto уже будут частью контракта контроллера, соответственно лежать должны рядом с ним. Это если у тебя стандартная трехслойная архитектура.
Спасибо. Кажется понял
Обсуждают сегодня