Nikolay
Зачем?
Ayrat
это как в функцию let createUser пихануть помимо логера и зависимости для создания юзера ещё зависимость для кеширования запросов, хотя она ему нахер не нужна и не используется
Ayrat
Вместо одного контроллера, в котором обрабатывается одна логика, появится 3 контроллера
чтобы контроллер отвечал за свою сферу деятельности а не всё на свете (3 разных сервиса которые ты не хочешь ресолвить вместе)
Nikolay
Сейчас 40 контроллеров, будет 120?
Nikolay
И это в лучшем случае
Ayrat
Так он и отвечает за свою сферу)
но при этом ты озвучил проблему что методы дёргают только 1 их 3х сервисов
Ayrat
а резолвить при создании контролера надо все 3
Ayrat
проблема не моя, я только способ решения привёл
Ayrat
разделить на разные контроллеры или сделать резолв лейзи
Nikolay
Ну FilesController, пишет и читает файлы
Nikolay
Один сервис для записи, второй - для чтения
Ayrat
Ну FilesController, пишет и читает файлы
Так же общо мог создать сразу: ResponseController отвечает за создание респонсов на все реквесты.
Ayrat
И потом снова не понимать почему же у тебя всё в куче
Ayrat
ведь ResponseController такой хороший, он отвечает только за одну сферу - создание респонсов на любые реквесты!
Nikolay
Ну так что, делать отдельные контроллеры на чтение, и отдельные на запись?
Ayrat
Ну так что, делать отдельные контроллеры на чтение, и отдельные на запись?
Не знаю, я предметную область не вижу. Ты озвучил проблему - я подсказал ad-hoc решение)
Nikolay
Ну допустим, такой пример простой: Получить картинку профиля пользователя по id пользователя (UsersReadService.GetUserProfileImageId(idUser), FilesReadService.GetFileById(profileImageId)
Nikolay
И UsersReadService создаст свой DbContext, и FilesReadService свой
Nikolay
Разбивать тогда на: UsersReadController (UsersReadService) UsersWriteController (UsersWriteService) UsersReadFilesController (UsersReadService, FilesReadService) UsersWriteFilesController (UsersWriteServics, FilesWriteService) ?
Ayrat
ИЛИ СДЕЛАТЬ РЕЗОЛВ ЛЕЙЗИ???
Ayrat
я ж 5 раз уже написал
Nikolay
ИЛИ СДЕЛАТЬ РЕЗОЛВ ЛЕЙЗИ???
Так антипаттерн же
Nikolay
Сервис локатор
Ayrat
вообще не понял как ты сервис локатор и лейзи резолв совместил
Vladislav
Нет, веб же
но скоупед есть в коре
Ayrat
т.е. давай уточним в чём проблема. Если у тебя догий резолв (что странно) и ты хочешь соптимайзить на обработке запросов, то тебе или разбивать контролеры или делать их лейзи (Lazy)
Ayrat
Ну смысл же тот же, разве нет?
ну нет. Ты просто не создаёшь контекст например при создании контролера
Ayrat
а создаёшь Lazy<DbContext>
Nikolay
Резолвит быстро, но мусорит
Nikolay
Мусорит безумно
Ayrat
профилировал?
Nikolay
Плюс есть God object
Ayrat
чем мусорит?
Nikolay
DbContext'ами в основном
Nikolay
Там из-за того, что куча вложенностей
Nikolay
И есть один наследственный God Object
Nikolay
Избавившись от God Object в модуле аутентификации, получил в 4 раза меньше резолва зависимостей
Ayrat
Тут диссонанс. Ты юзаешь EF и думаешь об оптимизациях. Давай может или юзать даппер и думать об оптимизациях Или юзать EF и не думать об оптимизациях.
Nikolay
Есть и EF и даппер
Vladislav
ИЛИ СДЕЛАТЬ РЕЗОЛВ ЛЕЙЗИ???
в его случае можно IServiceProvider инжектить и все
Nikolay
Проект условно разделён на 2 части, легаси и новая
Nikolay
В новой получше всё, но из-за того, что ей нужно со старой взаимодействовать, приходится трогать God object
Nikolay
Который инжектит 100500 зависимостей
Vasily
Кароч, @Dolfik ,у тебя проблема в разделении зон ответственности
Vasily
Обычно бьют по типам объектов
Nikolay
Вообще странные вещи творятся
Vasily
А не по типам операций
Nikolay
Смотрю обучение ФП боком прошло
Надо в существующее говно вклиниться, ничего не поломав
Nikolay
Тут не об ФП думаешь
Vasily
Карочи
Vasily
Делаешь интерфейс
Vasily
В имплементации в конструктор пихаешь всякое
Vasily
Профит
Vladislav
возвращаясь к теме наркомании и лямбд
Vladislav
дженериковый метод это же пример параметрического полиморфизма?
Анна
дженериковый метод это же пример параметрического полиморфизма?
да. Только если ещё ограничения на тип-параметр есть, то там смешан параметрический и subtyping
Vladislav
да. Только если ещё ограничения на тип-параметр есть, то там смешан параметрический и subtyping
судя по википедии это будет предикативный полиморфизм? т.е. как бы и T, но where : ...
Ayrat
судя по википедии это будет предикативный полиморфизм? т.е. как бы и T, но where : ...
это кстати можно натянуть на определение экзистенциальных типов
Ayrat
ну вот это вот where T: IService например
Анна
🤷‍♀️
Анна
* еще одно новое определение, sigh... *
ты в кроличью нору там провалился?
Vladislav
ты в кроличью нору там провалился?
да ну я не прям намеренно, сейчас наверно не стоит цели выучить всю теорию
Vladislav
но я бы хотел разбираться в теории типов
Анна
да ну я не прям намеренно, сейчас наверно не стоит цели выучить всю теорию
http://lucacardelli.name/Papers/OnUnderstanding.A4.pdf про полиморфизм я вот это ботанила вперемешку с Пирсом
x
не тот ли это лука который полифонический доДиез?
Vladislav
это кстати можно натянуть на определение экзистенциальных типов
type Existential<'T, 'TFrom> = { Value: 'T; Convert: 'TFrom -> 'T } такое?
Ayrat
type Existential<'T, 'TFrom> = { Value: 'T; Convert: 'TFrom -> 'T } такое?
чот очень сложно. На самом деле любое ограничение на дженерик - уже намёк на экзистенциальность типа!
Vladislav
Экзистенциальные типы явным образом доступны в качестве экспериментального расширения языка Haskell, где они представляют собой специальный синтаксис, позволяющий использовать переменную типа в определении алгебраического типа, не вынося её в сигнатуру конструктора типов, то есть не повышая его арность.
Vladislav
ааа
Vladislav
т.е. TFrom не должно быть?
Анна
Экзистенциальные типы - это про абстракцию больше. И вот модули в OCaml - это экзистенциальные типы, по идее
Анна
хотя я не до конца раскурила ещё их
Анна
В дженериках квантор всеобщности, поэтому они универсальные. А в этих квантор существования, поэтому экзистенциальные