170 похожих чатов

Подскажите пожалуйста, как определиться с тем, что передавать с сервисные

классы?

Допустим у меня есть пара моделей Order и Item. При создании заказа у меня есть некоторые данные (без id) и список id-шек товаров. Есть некоторый сервисный класс, который выполняет создание заказа.

Варианты которые сформированы у меня в голове:
1) В этот класс я могу передавать недособранный Order, в котором категории без данных, только id-шники (тогда внутри придется создавать еще один экземпляр Order, так как открытые сеттеры делать не очень хорошо)
2) Разделяю заказ на OrderInfo и id-шники коллекций и передаю OrderInfo и IEnumerable<Guid> в сервис
3) Собираю все Item-ы внутри контроллера по их id-шникам, и создаю Order с уже заполненными item-ами, таким образом у меня выходит целостный заказ (без непосредственно своего id)

На скринах концептуальные наброски контроллеров в таком случае

7 ответов

13 просмотров

Передавай dto в сервис, там создавай из этого dto объект order, потом сохраняй в бд или что с ним надо делать. Можешь инкапсулировать Order так чтобы его можно было инициализировать только с передачей item'ов и других полей, либо через конструктор, либо через required поля

У тебя CreateOrderDto очень простой, выкини вообще класс, и передавай только данные как аргументы методов. т.е. сервис у тебя будет принимать createdBy и список айдишников

Никита- Автор вопроса

В данном случае это просто пример. Вопрос от части концептуальный. По факту у меня проьлемы появляются если у объекта коллекции хотя бы 2 и полей большее количество полей

βλαδιμιρ
У тебя CreateOrderDto очень простой, выкини вообще...

Он используется в методе контроллера, то есть мапится с телом запроса. Выкинуть не получится. И вообще там в будущем могут другие поля появится

Никита- Автор вопроса
Magomed Mirzaev
Передавай dto в сервис, там создавай из этого dto ...

Спасибо. Попробую так. На самом деле такой вариант даже не рассматривал, так как как-то сказали, что в сервисы dto-шки передавать нельзя, потому что это сильно представление и логику связывает

Никита
В данном случае это просто пример. Вопрос от части...

Ну концептуально это выглядит так. Тебе в сервис нужно передать какие-то данные, но их много или они сложные и поэтому они не помещаются в аргументы метода. Ты создаешь для этого модельку и как-нибудь ее называешь: CreateOrderRequest, CreateOrderCommand или по аналогии и кладешь ее рядом с сервисом. Это моделька часть контракта сервиса, принадлежит ему. Это важно, никаких контроллеров на этом уровне не существует. Дальше в контроллере у тебя есть несколько вариантов. Ты можешь эту модельку принять как аргумент у action-а и прокинуть в сервис. Если тебя не устраивает эта моделька (например у тебя там userid который нужно вытащить из токена), то в контроллере ты создаешь отдельные dto, в них принимаешь то, что должно приходить снаружи, и мапишь их в модельки сервиса. Эти dto уже будут частью контракта контроллера, соответственно лежать должны рядом с ним. Это если у тебя стандартная трехслойная архитектура.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта