|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
handmadeFromRu чекал он не держит конекшен открытым. открывает закрывает по запросу. Да, я об этом выше и написал. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 22:53 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
fkthat Не закрытый БЛ, а прозрачное кеширование, когда БЛ кеша просто не видит. Кеширующий декоратор . Декоратор это паттерн, если реализовывать в лоб, то это довольно уродливое решение. Поэтому лучше говорить про аспекты. fkthat И как это вообще связано с кол-вом интерфейсов не пойму. Декоратор он на то и декоратор, что имеет тот же интерфейс, что у декорируемого объекта. Я так понимаю, ты с кешем работаешь исключительно через декораторы? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 22:57 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
hVostt Декоратор это паттерн, если реализовывать в лоб, то это довольно уродливое решение. Поэтому лучше говорить про аспекты. Отличное решение. А аспект это считай синоним. При правильной работе с DI декоратор становится вообще невидимым. Инжектишь интерфейс и получаешь уже задекорированный согласно конфигурации DI объект. У меня для автофака было несколько кастомных расширений, которыми можно было через атрибуты декорировать интерфейсы/объекты разной валидацией, аудитом, обработкой исключений и т.п. hVostt Я так понимаю, ты с кешем работаешь исключительно через декораторы? :) Конечно. Не напрямую же его вызывать, мешая либо логику, либо работу с данными и кеширование. Принцип SR. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 23:26 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
hVostt handmadeFromRu а как CQRS поможет не шлепать репо и uow? не понимаю так у тебя для публики команды и запросы никто в репу не ходит, есть она там и или нет. насчёт uow, по-хорошему нужен, но не обязателен, если структура логики позволяет так я ж про другое имел изначально вот поголовно пишут repo+uow а тот же ef эт уже эта связка. также можно прокидывать в cqrs контектс напрямую но нынче модно абсракцию поверх орм на всякий ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 23:33 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
fkthat Отличное решение. А аспект это считай синоним. При правильной работе с DI декоратор становится вообще невидимым. Инжектишь интерфейс и получаешь уже задекорированный согласно конфигурации DI объект. У меня для автофака было несколько кастомных расширений, которыми можно было через атрибуты декорировать интерфейсы/объекты разной валидацией, аудитом, обработкой исключений и т.п. es ) fkthat Конечно. Не напрямую же его вызывать, мешая либо логику, либо работу с данными и кеширование. Принцип SR. Ну тогды ладно :) У нас проектах кеш не только для чистых данных используется, но и много для чего ещё. Хотя, глядя на единственный CRUD проджект, который у нас есть небольшой, там и правда не используется.. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 23:38 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
handmadeFromRu так я ж про другое имел изначально вот поголовно пишут repo+uow а тот же ef эт уже эта связка. также можно прокидывать в cqrs контектс напрямую но нынче модно абсракцию поверх орм на всякий Ну вот как раз на случай обмазать кешем, аудитом и прочей фигнёй) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 23:39 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
hVostt У нас проектах кеш не только для чистых данных используется, но и много для чего ещё. А что в кеше кешировать-то можно кроме данных? Понятно, что можно его просто использовать еще как быстрый key-value store, но это уже как бы и не кеш будет, а просто store для данных. Да и в таком случае не напрямую же использовать опять-таки, а завернуть во что-то хорошо бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 23:49 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
fkthat А что в кеше кешировать-то можно кроме данных? Понятно, что можно его просто использовать еще как быстрый key-value store, но это уже как бы и не кеш будет, а просто store для данных. Да и в таком случае не напрямую же использовать опять-таки, а завернуть во что-то хорошо бы. На кеше много чего интересного можно реализовать :) Как бы, и зачастую проще заюзать IMemoryCache, чем городить город из декораторов. Понимаю, что есть динамик кастл и прочие прикольные штуки, но это не молоток, чтобы теперь все-все задачи были гвоздями. Где-то уместно, где-то не очень. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2020, 23:57 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
hVostt На кеше много чего интересного можно реализовать :) Как бы, и зачастую проще заюзать IMemoryCache, чем городить город из декораторов. Понимаю, что есть динамик кастл и прочие прикольные штуки, но это не молоток, чтобы теперь все-все задачи были гвоздями. Где-то уместно, где-то не очень. Так декоратор внутри себя и использует IMemoryCache или подобное - ты что же, думаешь, там в нем какой-то самодельный кеш, что ли. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 07:55 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
fkthat Так декоратор внутри себя и использует IMemoryCache или подобное - ты что же, думаешь, там в нем какой-то самодельный кеш, что ли. Ну вообще, чаще всего уместно использовать IDistributedCache, это всё очень вариативно, чтобы всегда можно было решать декоратором. Поэтому декоратор это как шаблонный паттерн для массивного применения. Точечно пилить декоратор это злостный оверхед. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 12:53 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
hVostt Ну вообще, чаще всего уместно использовать IDistributedCache Да хоть вообще обычный Dictionary - суть-то не в этом. hVostt Точечно пилить декоратор это злостный оверхед. Он пилится за три минуты даже в пьяном угаре. Причем можно сделать базовый декоратор и сделать так, что при желании сменить кеш-провайдер менять надо будет только в одном месте. (впрочем, у нас использовали CacheManager - он уже сам по себе адаптер к любому провайдеру). Декоратор он для того, чтобы 1) отделить код работы с кешем от кода и БЛ и ДАЛ в отдельное место. 2) сделать для БЛ кеш прозрачным - он вообще не будет знать, что он вызывает ДАЛ не напрямую, а через кеш. Может, ты просто под декоратором что-то другое понимаешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 13:06 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
fkthat Декоратор он для того, чтобы 1) отделить код работы с кешем от кода и БЛ и ДАЛ в отдельное место. 2) сделать для БЛ кеш прозрачным - он вообще не будет знать, что он вызывает ДАЛ не напрямую, а через кеш. 1) он итак уже отделён в отдельном месте, называется это место IMemoryCache :) 2) вообще он должен знать, так как без нормальной инвалидации такой кеш приносит больше вреда, чем пользы Я всё равно не поддерживаю идеалистические подходы, без зрелого и осознанного понимания что делаешь в каждом конкретном случае. Всё делать через декоратор -- такое себе утверждение. Как бы вот есть отвёртка, есть шуруповёрт, есть пневматика. Для каждого случая, для каждой задачи больше подходит свой инструмент. Говорить, что теперь всё херачим шуруповёртом и гвозди забиваем -- ну хз ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 13:15 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
fkthat Может, ты просто под декоратором что-то другое понимаешь? Декоратор это структурный паттерн, это для организации структуры приложения. Нельзя решить все проблемы и задачи работы с кешем структурой. Ибо там дальше может дойти до маразма, и код будет предтсавлять собой десятиэтажную абстракцию, ради решения простой задачи. Это будет медленно работать, жрать ресурсы, а разработчики вынуждены писать тонну оверхеда, ради экономии одной строчки кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 13:22 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
hVostt Декоратор это структурный паттерн, это для организации структуры приложения. Деление на типы паттернов часто очень условное. Декоратор он для того, чтобы не изменяя интерфейс объекта менять тем или иным образом его поведение (в том числе и динамически в рантайме). А медиатор, например, относят к паттернам поведения, но его также можно отнести и к структурным (структуру-то приложения он тоже задает). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 13:48 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
hVostt Нельзя решить все проблемы и задачи работы с кешем структурой. Какая структура? Какие жрет ресурсы? Весь кеширующий код, который у меня в декораторе у тебя без декоратора будет в том же виде либо в БЛ, либо в ДАЛ. С тем же успехом можно сказать, что ДАЛ жрет ресурсы, а чтобы не жрал, его весь внутрь БЛ надо поместить. Ты стопудово под декоратором что-то свое понимаешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 13:52 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
fkthat Какая структура? Какие жрет ресурсы? Весь кеширующий код, который у меня в декораторе у тебя без декоратора будет в том же виде либо в БЛ, либо в ДАЛ. С тем же успехом можно сказать, что ДАЛ жрет ресурсы, а чтобы не жрал, его весь внутрь БЛ надо поместить. Ты стопудово под декоратором что-то свое понимаешь. Ты лучше расскажи как решаешь проблему с инвалидацией кеша на декораторах :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 14:41 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
fkthat Деление на типы паттернов часто очень условное. Декоратор он для того, чтобы не изменяя интерфейс объекта менять тем или иным образом его поведение (в том числе и динамически в рантайме). А медиатор, например, относят к паттернам поведения, но его также можно отнести и к структурным (структуру-то приложения он тоже задает). Почему условное-то? Вполне себе конкретное :) Декоратор никоим образом не оказывает влияния на взаимодействие компонентов. А медиатор это конкретное решение для обеспечения взаимодействие. И я видел злоупотребление тем же медиатором. Как видел злоупотребление декоратором. Любую здравую вещь можно превратить в культ и пихать куда не следует. В некоторым случаях смотришь на код, где декоратор на декораторе, и думаешь, уж лучше бы этот человек писал обычный лапшекод, чем эту жесть. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 14:48 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
hVostt И я видел злоупотребление тем же медиатором. Как видел злоупотребление декоратором. Если в голове пусто, то злоупотребить даже морковным соком можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 17:46 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
fkthis hVostt И я видел злоупотребление тем же медиатором. Как видел злоупотребление декоратором. Если в голове пусто, то злоупотребить даже морковным соком можно. Ну вот! К вопросу о transient-ном DbContext, может не надо ломать контекст, чтобы не защащаться от злостных изменений? Как бы если в голове пусто, то хоть привяжи ко лбу пенопласт, помешать разбить лоб это не поможет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 18:59 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
hVostt Ну вот! К вопросу о transient-ном DbContext, может не надо ломать контекст, чтобы не защащаться от злостных изменений? Ну вот, допустим у меня поверх ЕФ репы. А у репы по самой её сути один вызов - одна транзакция (либо прочитать, либо сохранить). На кой леший мне шарить контекст между ними, если я от этого ничего не выгадываю, а проблем поиметь могу? Расшаренный контекст может иметь смысл, когда действительно с ним, как с UoW работать (таки, правда, и не выяснили, кто этот UoW коммитить будет). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 19:32 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
fkthis Ну вот, допустим у меня поверх ЕФ репы. А у репы по самой её сути один вызов - одна транзакция (либо прочитать, либо сохранить). На кой леший мне шарить контекст между ними, если я от этого ничего не выгадываю, а проблем поиметь могу? Расшаренный контекст может иметь смысл, когда действительно с ним, как с UoW работать (таки, правда, и не выяснили, кто этот UoW коммитить будет). Ну ты хоть покажи каких проблем ты там ожидаешь поиметь. Я в упор не понимаю о каких проблемах ты говоришь. Может ты с ними столкнулся в реале? Потому что сейчас это похоже на проблему преждевременной эякуляции оптимизации. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 01:54 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
hVostt Потому что сейчас это похоже на проблему преждевременной эякуляции оптимизации. У меня все по-скаутски "будь готов" Допустим, у тебя в приложении глобальная переменная, она проблем пока не создавала, но ты видишь, что совершенно спокойно можешь сделать её локальной. Ты это сделаешь, или же это тоже будет "преждевременный рефакторинг"? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 10:12 |
|
Иньекция DbContext
|
|||
---|---|---|---|
#18+
fkthis У меня все по-скаутски "будь готов" Допустим, у тебя в приложении глобальная переменная, она проблем пока не создавала, но ты видишь, что совершенно спокойно можешь сделать её локальной. Ты это сделаешь, или же это тоже будет "преждевременный рефакторинг"? Займусь этим когда в этом возникнет необходимость. Например, глобальная переменная может создать мне проблем для покрытия тестами -- там и сделаю то, что нужно. А просто так заниматься бессмысленной работой смысла не вижу. Твой пример -- яркий. Ты себе что-то вообразил и борешься с этим. Тысячи людей пользуют DbContext в скоупе и он так используется по примерам майкрософт, и всё хорошо. У тебя вдруг с какого-то перепугу в голове стало плохо. Переклинило чтоли? Ну если у тебя дофига свободного времени, и заняться больше нечем, переноси DbContext из скоупа в транзиент. Работа настолько же бессмысленная, насколько и бесполезная и глупая. Но если тебе так спокойней, делай кто мешает ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 15:42 |
|
|
start [/forum/topic.php?fid=18&msg=40016671&tid=1354606]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 332ms |
total: | 467ms |
0 / 0 |