|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КГлавное - иметь своё мнение. И если оно отличается от мнения большинства, это ещё не значит, что оно неправильное. Ну да Бог с ней, с философией... :-) Мнение большинства: биться о бетонную стену головой опасно. Мнение Васи Кожевникова (сисадмин в головной компании РЖД): всё это хрень, биться головой о бетонную стену можно и нужно - прояснение ума и осознание истинного бытия. Алексей КЕсли по теме - хочется обсудить архитектуру, ориентированную на конкретную СУБД + EF + максимальная производительность. Я так и не понял, почему у репозитория с IEnumerable хуже производительность, чем с IQueryable ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 16:36 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КskyANAА иногда полезно думать до и во время проектирования системы и смотреть, что вокруг-то происходит и пользоваться своим и чужим опытом, чтобы избежать лишних проблем.Главное - иметь своё мнение. И если оно отличается от мнения большинства, это ещё не значит, что оно неправильное. Ну да Бог с ней, с философией... :-)Аргументы в пользу Вашего мнения - это то, что у вас одна SQL БД и завтра это не изменится. При таких условиях сложно сказать, что Ваше мнение неправильное. Но реальность не ограничивается лишь Вашим случаем. Алексей КЕсли по теме - хочется обсудить архитектуру, ориентированную на конкретную СУБД + EF + максимальная производительность. Повторюсь, обсуждать тривиальные вещи, которые нынче модно называть репозитарием, мне не интересно. Там всё очевидно.Ну то есть архитектуру конкретной реализации. И что конкретно Вы хотите обсудить? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 16:47 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУАлексей КЕсли по теме - хочется обсудить архитектуру, ориентированную на конкретную СУБД + EF + максимальная производительность. Я так и не понял, почему у репозитория с IEnumerable хуже производительность, чем с IQueryable А я не понял, почему проигнорирован мой ответ , доказывающий несостоятельность автора упомянутого блога. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 16:48 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Примкну к Алексей К 1) Нужно держать живым дата контекст на протяжении более длительного времени. Это плохая практика. Web, WCF - per call; Winforms, WPF - время жизни окна. Что в этом плохого? 2) "Крутить базу может кто как хочет" (с) Это сеет хаос и демократию прикладного кода, в отличие от строго специфицированных репозиториев. UI - BL (сервисы) - DAL (репозитории). В сервисах работать с IQueryable, наружу отдавать IEnumerable. Кручу только я сам как хочу. Что в этом плохого? 3) И самая главная причина: зависимость от MSSQL + EF. Изменится источник или хранилище данных - приплыли. Вот этого совсем не понял. Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 16:49 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Главное - иметь своё мнение. И если оно отличается от мнения большинства, это ещё не значит, что оно неправильное. Ну да Бог с ней, с философией... :-)Аргументы в пользу Вашего мнения - это то, что у вас одна SQL БД и завтра это не изменится. При таких условиях сложно сказать, что Ваше мнение неправильное. Но реальность не ограничивается лишь Вашим случаем.А я и не утверждаю, что это решение универсальное, и должно применяться повсюду и всеми. В отличие от некоторых любителей репозитариев. :-) skyANAАлексей КЕсли по теме - хочется обсудить архитектуру, ориентированную на конкретную СУБД + EF + максимальная производительность. Повторюсь, обсуждать тривиальные вещи, которые нынче модно называть репозитарием, мне не интересно. Там всё очевидно.Ну то есть архитектуру конкретной реализации. И что конкретно Вы хотите обсудить?Теперь не знаю. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 16:51 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
SerP1983Winforms, WPF - время жизни окна.Я бы тут даже сократил до времени вызова ButtonClick. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 16:53 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КМСУпропущено... Я так и не понял, почему у репозитория с IEnumerable хуже производительность, чем с IQueryable А я не понял, почему проигнорирован мой ответ , доказывающий несостоятельность автора упомянутого блога.А Вы проигнорировали вопрос о том, как это поможет исключить дублирования логики запросов? Наружу торчит IQueryable. Кто мне запретит обращаться к нему, где хочу и как хочу, а не в одном месте? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 16:59 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КSerP1983Winforms, WPF - время жизни окна.Я бы тут даже сократил до времени вызова ButtonClick. Зависит от ситуации. Если взять супер-пупер асинхронный грид у девэкпресса (позволяет при скроле подгружать данные), то для него нужен датаконтекст на все время жизни этого грида, что, скорее всего, равно времени жизни формы. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 17:01 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КskyANAпропущено... Аргументы в пользу Вашего мнения - это то, что у вас одна SQL БД и завтра это не изменится. При таких условиях сложно сказать, что Ваше мнение неправильное. Но реальность не ограничивается лишь Вашим случаем.А я и не утверждаю, что это решение универсальное, и должно применяться повсюду и всеми. В отличие от некоторых любителей репозитариев. :-)Покажите-ка, где конкретно "любители репозиториев" утверждали, что их решение универсальное. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 17:01 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
SerP19833) И самая главная причина: зависимость от MSSQL + EF. Изменится источник или хранилище данных - приплыли. Вот этого совсем не понял. Код: c# 1. 2. 3. 4.
И что демонстрирует Ваш код? Вы предлагаете для начала выбрать все данные в List<T>? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 17:03 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... А я не понял, почему проигнорирован мой ответ , доказывающий несостоятельность автора упомянутого блога.А Вы проигнорировали вопрос о том, как это поможет исключить дублирования логики запросов? Наружу торчит IQueryable. Кто мне запретит обращаться к нему, где хочу и как хочу, а не в одном месте? 14913302 Так же ничто не мешает сделать 18 репозитариев с дублирующейся логикой. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 17:04 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
SerP1983Алексей Кпропущено... Я бы тут даже сократил до времени вызова ButtonClick. Зависит от ситуации. Если взять супер-пупер асинхронный грид у девэкпресса (позволяет при скроле подгружать данные), то для него нужен датаконтекст на все время жизни этого грида, что, скорее всего, равно времени жизни формы.Ок. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 17:04 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
skyANASerP19833) И самая главная причина: зависимость от MSSQL + EF. Изменится источник или хранилище данных - приплыли. Вот этого совсем не понял. Код: c# 1. 2. 3. 4.
И что демонстрирует Ваш код? Вы предлагаете для начала выбрать все данные в List<T>? Нет, я хотел сказать, что IEnumerable легко превращается IQueryable. И поэтому не понимаю, откуда взялась "зависимость от MSSQL + EF", ведь датаконтекст необязателен, а подойдет любой IEnumerable. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 17:06 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
SerP1983skyANAпропущено... И что демонстрирует Ваш код? Вы предлагаете для начала выбрать все данные в List<T>? Нет, я хотел сказать, что IEnumerable легко превращается IQueryable. И поэтому не понимаю, откуда взялась "зависимость от MSSQL + EF", ведь датаконтекст необязателен, а подойдет любой IEnumerable. ну или я думаю совсем не туда. Все равно, откуда "зависимость от MSSQL + EF"? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 17:08 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... А я и не утверждаю, что это решение универсальное, и должно применяться повсюду и всеми. В отличие от некоторых любителей репозитариев. :-)Покажите-ка, где конкретно "любители репозиториев" утверждали, что их решение универсальное. 14911778 Первый же ответ в этом топике. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 17:09 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
контекст это не только механизм который гребет данные, но и кеши двух уровней и механизм единицы работы.. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 17:10 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
SerP1983skyANAпропущено... И что демонстрирует Ваш код? Вы предлагаете для начала выбрать все данные в List<T>? Нет, я хотел сказать, что IEnumerable легко превращается IQueryable. И поэтому не понимаю, откуда взялась "зависимость от MSSQL + EF", ведь датаконтекст необязателен, а подойдет любой IEnumerable.Не "зависимость от MSSQL + EF", а необходимость писать реализацию IQueryProvider там где это не надо: 14913484 . ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 19:14 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КskyANAпропущено... А Вы проигнорировали вопрос о том, как это поможет исключить дублирования логики запросов? Наружу торчит IQueryable. Кто мне запретит обращаться к нему, где хочу и как хочу, а не в одном месте? 14913302 Так же ничто не мешает сделать 18 репозитариев с дублирующейся логикой.На практике почему-то такого не происходит А если торчит IQueryable, значит можно его использовать как IQueryable по полной, разве нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 19:38 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
SerP19833) И самая главная причина: зависимость от MSSQL + EF. Изменится источник или хранилище данных - приплыли. Вот этого совсем не понял. Код: c# 1. 2. 3. 4.
Ну это жесть какая-то. У одних методов репозтория IQueryable - отложенный запрос, который после транслируется в SQL - это тонкая специфика и понимание, с какой именно БД работаем. Иначе будет ошибка и запрос не сможет транслироваться. У других методов IQueryable не заточен под конкретную БД и представляет собой клиентскую коллекцию. Каша. Во что ретранслируется этот запрос и что он мне вернет? Код: c# 1.
Бред же. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 19:50 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУ, Форум— это дуракаваляние… Разговаривают, разговаривают… Контрреволюция одна. (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2013, 21:20 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... 14913302 Так же ничто не мешает сделать 18 репозитариев с дублирующейся логикой.На практике почему-то такого не происходит А если торчит IQueryable, значит можно его использовать как IQueryable по полной, разве нет?"На практике почему-то такого не происходит" (ц). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 08:36 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУНу это жесть какая-то. У одних методов репозтория IQueryable - отложенный запрос, который после транслируется в SQL - это тонкая специфика и понимание, с какой именно БД работаем. Иначе будет ошибка и запрос не сможет транслироваться. У других методов IQueryable не заточен под конкретную БД и представляет собой клиентскую коллекцию. Каша."Разруха, она в головах." (ц) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 08:40 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУБред же.Это как посмотреть. IQueryable позволяет на сервере приложений организовать окружение, напоминающее окружение в хранимой процедуре в БД. Например, IQueryable-свойство является аналогом View из T-SQL. Дополнительные возможности - это скорее хорошо чем плохо. Единственный недостаток - надо уметь ими пользоваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 08:44 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
2 skyANA и МСУ Спасибо, понял. Согласен, что IQueryProvider писать не айс; согласен, что для каждого IQueryProvider есть своя специфика и, если отдавать наружу IQueryable, можно словить жопу. Предлагаю рассмотреть 2 случая: 1) Опять повторюсь, что у devexpress есть возможность работать с гридом асинхронно (подгружать строки при скроле). Для этого надо использовать LinqInstantFeedbackSource, EntityInstantFeedbackSource, ещечегототамInstantFeedbackSource. При этом код писать практически не надо. Но для InstantFeedbackSource надо указывать Source как IQueryable. 2) Если посмотреть на domainservice (мертвый ria который) или на dataservice (живой OData), то там можно наружу выдавать IQueryable. Вопрос: мне в этих 2-х случаях отказаться от репозитория и напрямую пользовать контекст или сделать репозиторий с IQueryable? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 09:17 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей К"Разруха, она в головах." (ц) ... которые используют IQueryable методы в репозиториях :) Алексей КМСУБред же.Это как посмотреть. IQueryable позволяет на сервере приложений организовать окружение, напоминающее окружение в хранимой процедуре в БД. Например, IQueryable-свойство является аналогом View из T-SQL. Дополнительные возможности - это скорее хорошо чем плохо. Единственный недостаток - надо уметь ими пользоваться. Какое еще окружение? Или ты про кашу IQueryable, которая не пойми что возвращает: в одних случаях это отложенный сиквел запрос с последующей ретрансляцией, в других это просто клиентская коллекция. Может тебе посмотреть на OData? SerP19832 skyANA и МСУ Спасибо, понял. Согласен, что IQueryProvider писать не айс; согласен, что для каждого IQueryProvider есть своя специфика и, если отдавать наружу IQueryable, можно словить жопу. Предлагаю рассмотреть 2 случая: 1) Опять повторюсь, что у devexpress есть возможность работать с гридом асинхронно (подгружать строки при скроле). Для этого надо использовать LinqInstantFeedbackSource, EntityInstantFeedbackSource, ещечегототамInstantFeedbackSource. При этом код писать практически не надо. Но для InstantFeedbackSource надо указывать Source как IQueryable. 2) Если посмотреть на domainservice (мертвый ria который) или на dataservice (живой OData), то там можно наружу выдавать IQueryable. Вопрос: мне в этих 2-х случаях отказаться от репозитория и напрямую пользовать контекст или сделать репозиторий с IQueryable? 1. Вся беда, что ты под какие-то там компоненты пытаешься рихтовать архитектуру. Это не айс. 2. Про OData уже писал, это отдельный специфический продукт, который заточен под IQueryable. Более того, OData - это не репозиторий, там ты сам контроллер ApiController обязываешь играть по правилам IQueryable. Вообщем, это отдельная тема. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2013, 09:50 |
|
|
start [/forum/moderation_log.php?user_name=Dushes]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 749ms |
total: | 911ms |
0 / 0 |