|
Совет про контекст базы данных - создание в контроллерах
|
|||
---|---|---|---|
#18+
hVostt graycode пропущено... Когда доменной логикой является только сохранение данных или их выдача, то доменным слоем становится репозиторий, объект получаемый из репозитория мапится на dto-сущность контроллера, которую контроллер отдает наружу. Доменного слоя не существует :) Объект, получаемый из репозитория, и отдающийся наружу -- это самый примитивный случай, по сути учебный. В реальном мире, необходимо возвращать срез данных, доступных для пользователя для заданного запроса. И ещё ряд различных сценариев, по которым может отработать действие. А выполнение действия должно сопровождаться рядом вырожденных условий. Собственно контроллер от самого названия очевидно должен на требуемый запрос выполнять необходимую логику. А вот это: Код: c# 1.
по сути проксирование и перенос задач контроллера в логику, и протекание логики в контроллер. Так как в таком случае логика пишется 1 в 1 под запросы, что в принципе нарушает SRP. +146 Контроллер задачи аутентификации решает, какие коды http вернуть, в каком формате ответ, что-то логирует из http, какую-то логику сам содержит, мидлваре там ещё работает. Относиться к нему как к прокси над сервисами нижнего слоя - это не прааильно ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 00:54 |
|
Совет про контекст базы данных - создание в контроллерах
|
|||
---|---|---|---|
#18+
hVostt В реальном мире, необходимо возвращать срез данных, доступных для пользователя для заданного запроса. И ещё ряд различных сценариев, по которым может отработать действие. А выполнение действия должно сопровождаться рядом вырожденных условий. Собственно контроллер от самого названия очевидно должен на требуемый запрос выполнять необходимую логику. Контроллер не должен формировать срез данных или выполнять какую то логику, инициировать работу логики и получить из сформированного среза данных объект который нужно отдать пользователю это задача контроллера, т.е. отмапить полученный срез данных в dto который будет отдан пользователю, если срез данных получить не удалось, то обрабатываются ошибки и тоже формируются объекты для ошибок и отдаются в качестве результата наружу. Логика обрабатывается в более глубоком слое. hVostt А вот это: Код: c# 1.
Сначала должен идти вызов необходимой логики и получение результата, далее если результат получен успешно, то он мапится на SomeModelDtoToReturn и после этого отдается return Ok(SomeModelDtoToReturn), если не получен то создается объект ошибки и выдается вместе со статусом ошибки. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 01:26 |
|
Совет про контекст базы данных - создание в контроллерах
|
|||
---|---|---|---|
#18+
graycode hVostt В реальном мире, необходимо возвращать срез данных, доступных для пользователя для заданного запроса. И ещё ряд различных сценариев, по которым может отработать действие. А выполнение действия должно сопровождаться рядом вырожденных условий. Собственно контроллер от самого названия очевидно должен на требуемый запрос выполнять необходимую логику. Контроллер не должен формировать срез данных или выполнять какую то логику, инициировать работу логики и получить из сформированного среза данных объект который нужно отдать пользователю это задача контроллера, т.е. отмапить полученный срез данных в dto который будет отдан пользователю, если срез данных получить не удалось, то обрабатываются ошибки и тоже формируются объекты для ошибок и отдаются в качестве результата наружу. Логика обрабатывается в более глубоком слое. hVostt А вот это: Код: c# 1.
Сначала должен идти вызов необходимой логики и получение результата, далее если результат получен успешно, то он мапится на SomeModelDtoToReturn и после этого отдается return Ok(SomeModelDtoToReturn), если не получен то создается объект ошибки и выдается вместе со статусом ошибки. Да. И тестировать это довольно не тривиальное образование как "вызвал что-то там внутри себя" - бессмысленное занятие ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 12:13 |
|
Совет про контекст базы данных - создание в контроллерах
|
|||
---|---|---|---|
#18+
love_bach graycode пропущено... Контроллер не должен формировать срез данных или выполнять какую то логику, инициировать работу логики и получить из сформированного среза данных объект который нужно отдать пользователю это задача контроллера, т.е. отмапить полученный срез данных в dto который будет отдан пользователю, если срез данных получить не удалось, то обрабатываются ошибки и тоже формируются объекты для ошибок и отдаются в качестве результата наружу. Логика обрабатывается в более глубоком слое. пропущено... Сначала должен идти вызов необходимой логики и получение результата, далее если результат получен успешно, то он мапится на SomeModelDtoToReturn и после этого отдается return Ok(SomeModelDtoToReturn), если не получен то создается объект ошибки и выдается вместе со статусом ошибки. Да. И тестировать это довольно не тривиальное образование как "вызвал что-то там внутри себя" - бессмысленное занятие А если это тупо CRUD, то наварачивать "слои", "провайдеры", "репозитории"... - так себе (просто никому не нужное количество бессмысленного кода). Все нужное можно в самих методах контроллера реализовать ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 12:20 |
|
Совет про контекст базы данных - создание в контроллерах
|
|||
---|---|---|---|
#18+
love_bach Да. И тестировать это довольно не тривиальное образование как "вызвал что-то там внутри себя" - бессмысленное занятие А кто вас просит писать на это тесты? love_bach А если это тупо CRUD, то наварачивать "слои", "провайдеры", "репозитории"... - так себе (просто никому не нужное количество бессмысленного кода). Все нужное можно в самих методах контроллера реализовать CRUD это репозиторий и есть, хотите превратить контроллер в объект-бог, ваше право. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 13:02 |
|
Совет про контекст базы данных - создание в контроллерах
|
|||
---|---|---|---|
#18+
graycode love_bach Да. И тестировать это довольно не тривиальное образование как "вызвал что-то там внутри себя" - бессмысленное занятие А кто вас просит писать на это тесты? Я такие тесты не пишу - ответ на это graycode love_bach А если это тупо CRUD, то наварачивать "слои", "провайдеры", "репозитории"... - так себе (просто никому не нужное количество бессмысленного кода). Все нужное можно в самих методах контроллера реализовать CRUD это репозиторий и есть, хотите превратить контроллер в объект-бог, ваше право. "объект-бог" - это несколько про другое, но, пусть будет именно контроллер "богом", если там больше, в конечном итоге, нечему им становиться. Вариант с Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
бессмысленный код, который (ладно хрен с ним, легко писать) запаришься читать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 13:21 |
|
Совет про контекст базы данных - создание в контроллерах
|
|||
---|---|---|---|
#18+
graycode CRUD это репозиторий и есть... особенно, учитывая, что DbContext - это репозиторий на стероидах от микрософт ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 13:29 |
|
Совет про контекст базы данных - создание в контроллерах
|
|||
---|---|---|---|
#18+
graycode Контроллер не должен формировать срез данных или выполнять какую то логику, инициировать работу логики и получить из сформированного среза данных объект который нужно отдать пользователю это задача контроллера, т.е. отмапить полученный срез данных в dto который будет отдан пользователю, если срез данных получить не удалось, то обрабатываются ошибки и тоже формируются объекты для ошибок и отдаются в качестве результата наружу. Логика обрабатывается в более глубоком слое. У вас если действия контроллеров 1 к 1 мапятся на методы сервисов, то у вас это не контроллер, а прокси. Вы функции контроллера вынесли и замешали с бизнес-логикой в "более глубоком слое". Года два назад мне упал проект в котором было около 40 контроллеров, и в совокупности чуть более 500 действий контроллеров, которые выглядели так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
И таких методов, напомню, более 500 штук. И они продолжали плодиться. Количество оверхеда зашкаливает. Умные люди тупо отказывались работать на этом проекте, ибо говно. Ибо кто-то начитался всякой херни в интернетах, неправильно понял, так и не понял концепции контроллера и заложил такую архитектуру, чтобы люди как можно больше занимались обезьяньим трудом. И да, это всё было обильно покрыто тестами, которые по фидбеку от команды, никогда не ломаются. Никогда, какой бы рефакторинг не проводился, они абсолютно бессмысленные и бестолковые. Вот такие упоротые "орхитекторы" гнездятся тут и там, не желая задействовать даже грамма своего мозга, прежде чем начать работать. graycode Сначала должен идти вызов необходимой логики и получение результата, далее если результат получен успешно, то он мапится на SomeModelDtoToReturn и после этого отдается return Ok(SomeModelDtoToReturn), если не получен то создается объект ошибки и выдается вместе со статусом ошибки. А логика обработки запроса где? Правильно, она у вас переехала в глубокие недра бизнес-логики. И вы ещё рассказываете про SRP. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 16:47 |
|
Совет про контекст базы данных - создание в контроллерах
|
|||
---|---|---|---|
#18+
graycode CRUD это репозиторий и есть, хотите превратить контроллер в объект-бог, ваше право. А вы с OData работали? Посмотрите, это на многое откроет вам глаза :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 16:53 |
|
Совет про контекст базы данных - создание в контроллерах
|
|||
---|---|---|---|
#18+
Прекрасно, только зачем этот ответ был адресован мне? hVostt, love_bach, Все равно мы останемся при своем мнении, сколько бы мы не спорили, поскольку результат будет давать любой подход в том числе и чисто процедурный. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 18:39 |
|
Совет про контекст базы данных - создание в контроллерах
|
|||
---|---|---|---|
#18+
graycode Ответ адресован вам, но размещён на публичном форуме, т.е. информация нацелена для всех. Никто вас ни к чему не принуждает. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 22:26 |
|
Совет про контекст базы данных - создание в контроллерах
|
|||
---|---|---|---|
#18+
hVostt Ответ адресован вам, но размещён на публичном форуме, т.е. информация нацелена для всех. Никто вас ни к чему не принуждает. Глупость какая то, отвечать на сообщение но в качестве адресата указывать не то сообщение на которое отвечаете и вообще другого человека, и вы считаете это нормальным? Вот читаю такое сообщение и задаю закономерный вопрос, почему оно было адресовано мне? Хотя наверное "Я такие тесты не пишу - ответ на это", было извинением за ошибку адресом, ну ладно принимается)) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 00:23 |
|
Совет про контекст базы данных - создание в контроллерах
|
|||
---|---|---|---|
#18+
graycode hVostt Ответ адресован вам, но размещён на публичном форуме, т.е. информация нацелена для всех. Никто вас ни к чему не принуждает. Глупость какая то, отвечать на сообщение но в качестве адресата указывать не то сообщение на которое отвечаете и вообще другого человека, и вы считаете это нормальным? Вот читаю такое сообщение и задаю закономерный вопрос, почему оно было адресовано мне? Хотя наверное "Я такие тесты не пишу - ответ на это", было извинением за ошибку адресом, ну ладно принимается)) Я ничего не понял. И что за пунктик у вас по этому поводу? :) Мы тут просто общаемся и немного спорим. Считайте, что персональная переписка тут не ведётся. На мой вопрос вам может ответить любой другой из участников, или вступить в дискуссию в любой момент. Вот так всё тут устроено, как в посиделках в хорошей компании. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 01:12 |
|
Совет про контекст базы данных - создание в контроллерах
|
|||
---|---|---|---|
#18+
hVostt, Ну это совсем беда с логикой, упрощу для вашего понимания, вот напишу я сообщение, а другой человек свои претензии и вопросы по моему сообщению адресует вам, хотя это не ваше сообщение и не совсем ваша позиция, так ситуация понятнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 13:05 |
|
Совет про контекст базы данных - создание в контроллерах
|
|||
---|---|---|---|
#18+
graycode hVostt, Ну это совсем беда с логикой, упрощу для вашего понимания, вот напишу я сообщение, а другой человек свои претензии и вопросы по моему сообщению адресует вам, хотя это не ваше сообщение и не совсем ваша позиция, так ситуация понятнее? Да уж, форумная трагедия, не меньше :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 01:15 |
|
|
start [/forum/topic.php?fid=18&msg=40002837&tid=1354625]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 157ms |
0 / 0 |