|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2019, 23:08 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
WaspNewCorePetro123, ServiceResult, в моей интерпретации приведенной изначально, это некий прослоечный класс. Я думал сделать их кучу, а Shocker.Pro предлагает просто объединить в один класс, но с кучей свойств, как я понимаю, собранных со всех классов типа NotFoundResult, OkResult. Затем возвращать их из сервиса в контроллер, где некий метод будет анализировать этот объект и, в зависимости от заполнения свойств, создавать уже реальные Result'ы. Ну вот все это какое-то завуализованное и усложненное дублирование получается. Т.к. появится логика по парсингу ServiceResult с последующим созданием соответствующих result'ов. Уж лучше тогда как я предлагал, насоздавать MyNotFoundResult, MyOkResult и просто их преобразовывать в классы из Aspnet. Мне не нравится это решение. Я лучше при своем останусь.Многие пользуются (различные широкоиспользуемые библиотеки), а ему видите-ли не нравится. Ну не нравится - делай свой велосипед, отговаривать что-ли теперь? :) А так-то всё просто: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
Это разве куча свойств? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2019, 22:10 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
Простейшая конвертация: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2019, 22:18 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
И метод контроллера превращается в две строки: Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2019, 22:23 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
Дмитрий Мух, Масло масляное. В таком виде нет никаких причин не таскать через все слои asp.net-овские классы ActionResult, что уже наводит на определённые не весёлые мысли. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 01:39 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
WaspNewCoreВариант с Task<MyResult> я отбросил, т.к. такой формат не позволяет сервису возвращать различные статусы В вашем выбранном подходе УЖЕ WaspNewCoreНе красиво получается. Отсюда любые попытки решить ЭТО выглядит как поиск наилучшего способа поедания гнилого фрукта -- факт прогнилости никакой способ не изменит. Возвращать из внутренней логики статусы, которые нужны только для взаимодействия с клиентом по определённому протоколу, это уже шит, зашквар и... выбирайте абсолютно любой способ, так как всё равно получится фигня. Работать будет и ладно. Запушьте, залейте на прод и спите себе спокойно, одним г-кодом больше, какая разница :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 01:45 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
hVosttДмитрий Мух, Масло масляное. В таком виде нет никаких причин не таскать через все слои asp.net-овские классы ActionResult, что уже наводит на определённые не весёлые мысли. Какие такие asp.net-овские классы? Это не попытка таскать ActionResult. _myService же слой некой бизнес логики, где есть некие бизнес-операции, чаще всего успешные, но не всегда. Это классы бизнес-логики, доменной модели. Использоваться могут не только в asp.net. Вообще давайте всё в контроллер запихнём, следуя твоим рассуждениям. В нём же уже есть метод GetData. Зачем выделять какой-то сервис ещё с одним методом GetData? Масло масляное ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 08:50 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
Кстати легко заметить, что Код: c# 1.
просто оформляется как расширение Код: c# 1.
Легко покрывается тестами. И мы получам простую чепочку вызовов. Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 09:05 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
Мне одному кажется, что в шарпе модно все топики сводить к волшебному Result или MyResult? В прошлый раз 17 страниц обсуждали))). Или без Result писать не умеем? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 12:17 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
Petro123, да, функциональный подход в C# всё больше входит в моду... передаёшь параметры в метод и гарантированно получаешь результат определённого типа ни null, ни исключение, а Result чистые функции, читсый код без ветвлений и трай-кетчей, тестируемый, читабельный ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 14:18 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
Дмитрий Мух, передаёшь параметры в метод и гарантированно получаешь результат определённого типа ----- Все гораздо хуже. Наблюдается даже отход от ООП. Я тут как-то оценил затраты на создание полной модели данных для производства вполне определенного продукта. По результатам получилось около 2-х лет. Потом выкинул нафиг все ООП и нарисовал за неделю нужный результат элементарно получая нужные данные по месту/времени. Работало не эффективно, оптимизировать там разумеется ничего невозможно, но одна неделя вс два года... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 15:33 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
Petro123, https://docs.microsoft.com/ru-ru/aspnet/core/web-api/?view=aspnetcore-2.2 ---- Уже был анонс 3.0: https://devblogs.microsoft.com/dotnet/announcing-net-core-3-preview-3/ ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 15:35 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
PinkCat, +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 15:38 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
Дмитрий МухКакие такие asp.net-овские классы? Это не попытка таскать ActionResult. А что, по-твоему, такое ActionResult? Даже в названии видно, что это результат выполнения операции, который транслируется в ответ, это не сам ответ, в качестве которого выступает HttpResponseMessage. И чем он отличается от OperationResult в той интерпретации, которую ты привёл? Дмитрий Мух_myService же слой некой бизнес логики, где есть некие бизнес-операции, чаще всего успешные, но не всегда. Это классы бизнес-логики, доменной модели. Использоваться могут не только в asp.net. Спору нет, но всё сильно зависит от операции, от логики. Попытка свести все действия контроллеров в нечто подобное: Код: c# 1. 2. 3. 4. 5.
это диаметрально противоположный случай крайности размещения логики в контроллерах. И такой же фиговый, так как выражается в странных и бессмысленных действиях по принципу, чтобы человек не мог сломать себе ноги, давай их сразу отрежем и посадим на коляску. Дмитрий МухВообще давайте всё в контроллер запихнём, следуя твоим рассуждениям. В нём же уже есть метод GetData. Зачем выделять какой-то сервис ещё с одним методом GetData? Масло масляное Нет. Контроллеры должны быть тупыми, на не настолько, чтобы быть в них совершенно не было смысла. У них есть смысл, и это явно не конвертирование OperationResult в ActionResult. Это совершенно безумная крайность. Что тут тестировать? Правильно ли конвертится одно в другое? Это вообще обыкновенный маппинг и решается на другом уровне, с тестированием и самоконтролем. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 17:42 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
Дмитрий Мухда, функциональный подход в C# всё больше входит в моду... передаёшь параметры в метод и гарантированно получаешь результат определённого типа ни null, ни исключение, а Result чистые функции, читсый код без ветвлений и трай-кетчей, тестируемый, читабельный ФП хорошо. Эффективные практики из ФП брать -- хорошо. ФП головного мозга, как впрочем и остальное -- плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 17:43 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
Дмитрий МухКстати легко заметить, что Код: c# 1.
просто оформляется как расширение Код: c# 1.
Легко покрывается тестами. И мы получам простую чепочку вызовов. Код: c# 1. 2. 3. 4.
Я хз что тут покрывать. Маппинг? Если весь код такой, то в контроллерах вообще нет смысла, это обыкновенный оверхед. Функции контроллера перенесены в сервисы. Сервисы стали деревянными, и заточенными чисто под общение через конкретный протокол. Что касается "не зависит от...", ещё как зависит. Похоже всё идёт по очередному кругу и мы получаем очередную реинкарнацию RPC. Плохого в этом ничего нет, но наблюдается большой оверхед на то, что это впихивается в Web API. Хотя он уже нафиг тут не нужен, пишем декларативную обвязку в собсвтенном middleware. От OperationResult отпочковываем всякие CacheableOperationResult и т.д. и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 17:49 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
PinkCatДмитрий Мух, передаёшь параметры в метод и гарантированно получаешь результат определённого типа ----- Все гораздо хуже. Наблюдается даже отход от ООП. Где и в какую сторону? Поясните? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 18:15 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
hVosttДмитрий МухКстати легко заметить, что Код: c# 1.
просто оформляется как расширение Код: c# 1.
Легко покрывается тестами. И мы получам простую чепочку вызовов. Код: c# 1. 2. 3. 4.
Я хз что тут покрывать. Маппинг? Если весь код такой, то в контроллерах вообще нет смысла, это обыкновенный оверхед. Функции контроллера перенесены в сервисы. Сервисы стали деревянными, и заточенными чисто под общение через конкретный протокол. Что касается "не зависит от...", ещё как зависит. Похоже всё идёт по очередному кругу и мы получаем очередную реинкарнацию RPC. Плохого в этом ничего нет, но наблюдается большой оверхед на то, что это впихивается в Web API. Хотя он уже нафиг тут не нужен, пишем декларативную обвязку в собсвтенном middleware. От OperationResult отпочковываем всякие CacheableOperationResult и т.д. и т.п. Нет, всё совершенно не так. Никакие функции контроллера не перенесены в сервисы, о слова совсем. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 18:18 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
На мой взгляд намечается очередной бессмысленный и беспощадный спор. Хотелось бы увидеть какие-то конкретные и конструктивные примеры. Какие именно функции контроллера перенесены в сервис? В чём конкретно отход от ООП? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 18:22 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
Дмитрий МухНет, всё совершенно не так. Никакие функции контроллера не перенесены в сервисы, о слова совсем. Именно так это и выглядит. Если действие контроллера === действие сервиса, которое мапится из OperationResult в ActionResult, это действительно так. Совершенно так. По всем понятиям. Ибо если, тебе вдруг в контроллере надо будет вызвать несколько действий сервисов (т.е. это уже означает, что у контроллеров есть логика АПИ), то уже ToActionResult тут не обойдёшься, так как тебе нужно каскадно проверить все результаты. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 18:22 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
Дмитрий МухНа мой взгляд намечается очередной бессмысленный и беспощадный спор. Хотелось бы увидеть какие-то конкретные и конструктивные примеры. Какие именно функции контроллера перенесены в сервис? В чём конкретно отход от ООП? Хз насчёт ООП, я об этом не заикался. Я говорю о конкретных приведённых примерах. В частности о волшебном расширении ToActionResult. Нет, это не выглядит "круто, удобно, тестируемо,бла-бла-бла". Это выглядит глупо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 18:24 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
Дмитрий МухНа мой взгляд намечается очередной бессмысленный и беспощадный спор. Спор не о том, хорошо или плохо OperationResult. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 18:25 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
Дмитрий Мух, Где и в какую сторону? ----- В сторону процедурной парадигмы. По профилю - работа с разными базами как источниками информации. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 19:02 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
hVosttДмитрий МухНет, всё совершенно не так. Никакие функции контроллера не перенесены в сервисы, о слова совсем. Именно так это и выглядит. Если действие контроллера === действие сервиса, которое мапится из OperationResult в ActionResult, это действительно так. Совершенно так. По всем понятиям. Действие сервиса было и осталось дейтсвием сервиса, просто результат этого действия не тупо TValue, а OperationResult<TValue>. У тебя есть метод сервис Код: c# 1.
и Код: c# 1.
Внезапно последний перестал быть действием сервиса? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 19:46 |
|
AspNet Core. Как заинжектить текущий контроллер в класс-сервис ?
|
|||
---|---|---|---|
#18+
PinkCatДмитрий Мух, Где и в какую сторону? ----- В сторону процедурной парадигмы. По профилю - работа с разными базами как источниками информации. А, это вы про что-то своё. Вы хоть процитируйте пост, к которому относятся ваши выводы. Возврат не пермитивного типа, или TValue из метода DoSomething, OperationResult<TValue> тут при чём? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2019, 19:49 |
|
|
start [/forum/topic.php?fid=18&msg=39783897&tid=1355022]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 267ms |
0 / 0 |