|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatВот, типичный пример кода, наподобии того, который у нас в репах: Код: c# 1. 2. 3. 4. 5.
Ну так тут нет и даже не пахнет никакими отложенными вычислениями. Почему бы тогда не вернуть IReadOnlyCollection, например? А если хочется отложенных запросов и полного вагона преимуществ, почему не вернуть IQueryable? Какое-то упорное жевание кактуса. Как много я такого в чужих проектах видел, люди вы так любите боль? :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 01:31 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatПроблема в инкапсуляции. Сегодня внутри репо список, а завтра окажется HashSet. Эмм.. IQueryable -- отличная инкапсуляция в рамках ORM. Если хотите инкапсулироваться по самые помидоры, чтоб всё-всё можно было заменить (мы каждую неделю меняем СУБД, ОРМ-ы и даже языки программирования и платформы, в живых проектах), тогда тут репо, боюсь, не выстоит под напором требований. В CQRS уходить нужно, или как минимум в Query Object. Но IEnumerable тут вообще не решает задачу, так как никакими отложенными вычислениями тут не пахнет. Извините, но нет. А вот проблем создаёт. Тупо, количество приходится считать переходом, до идиотизма уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 01:35 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttА если хочется отложенных запросов и полного вагона преимуществ, почему не вернуть IQueryable? Потому что не везде тот же сиквел, и не везде даже EF. Поэтому не любой IQueryable будет поддерживать любой LINQ запрос. И каждый раз гадать - выполнится он или кинет "unsupported" иксепшен никто не хочет. Говорили же выше - слой репо - это слой абстракции над хранилищами, а не просто ничего не делающая по сути обертка над DbContext. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 01:43 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttмы каждую неделю меняем СУБД, ОРМ-ы и даже языки программирования и платформы, в живых проектах Мы не меняем их каждую неделю. У нас их просто и так есть стопитсот разных. И работать мы с ними хотим единообразно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 01:45 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatПотому что не везде тот же сиквел, и не везде даже EF. Поэтому не любой IQueryable будет поддерживать любой LINQ запрос. И каждый раз гадать - выполнится он или кинет "unsupported" иксепшен никто не хочет. Говорили же выше - слой репо - это слой абстракции над хранилищами, а не просто ничего не делающая по сути обертка над DbContext. Если используете ORM в виде EF, значит архитектуру работы с данными строите поверх него, там вся суть не только в LINQ, но и целый обвес. Вообще, решать задачу будущей замены ORM/EF/СУБД -- это удел джунов. Без обид, я сам таким болел когда-то. Это никому не нужная, бесполезная, настолько же беспощадная как и бессмысленная задача. Никто никогда не меняет ни ORM, ни СУБД на живых проектах. А даже если и приходится менять, то никакого волшебства никогда не получится, даже если в лоб расшибиться на абстракциях. Слой репо это по большему счёту не абстракция над хранилищем, а абстракция над данными. Когда вы это поймёте, получите буст по скиллу. Это значит, что рано или поздно вам понадобится: кеширование, метрика, безопасность, масштабирование, блокировки, распределение по различным хранилищам и т.д. И дело вовсе не в "exception", которого вы так боитесь от LINQ запроса. EF такие проекты вывозит, вам и не снилось. Поэтому если занимаетесь глупостями с возвратом IEnumerable вместо IQueryable, то конечно ваше дело, рано или поздно поймёте, что фигнёй страдали :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 02:52 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthat, В ином случае, репо для целей полной абстракции от хранилища работает очень плохо. Прям очень. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 02:54 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttЯ уже писал что в этом случае делать нужно. Возвращать IQueryable. Если же у пациента на IQueryable болезненный (и абсолютно не обоснованный) пунктик, тогда он должен возвращать интерфейс коллекции, а не заниматься фигнёй. ты писал, что это "перечисление, которое может быть или бесконечным генератором, или иметь свойство одноразового применения и за его использование убивать надо". Вроде ничего из твоего бредогенератора не упустил. Дошло наконец, что не будет у репозитория никаких проблем со множественным перечислением IEnumerable? Гуд, одну шизу вылечили. А IQueryable вообще здесь из другой оперы, показывает только, что ты ничего кроме своего магазина с губной помадой не делал размазывая код запросов по всей системе hVosttВ этом и дело, IEnumerable крайне абстрактная структура. Приделать асинхронную материализацию невозможно. Сделать трансляцию в запрос невозможно. Сменить способ реализации отложенного вычисления невозможно. да потому-что отложенные вызовы в репозитории говнокодят только такие как ты писатели помадных магазинчиков. Трансляцию в запрос он сделать не может Получи сначала опыт разработки коммерческих систем посложнее магазинчиков и не используй слова, которые ты видел только в гугле hVosttНу так тут нет и даже не пахнет никакими отложенными вычислениями. Почему бы тогда не вернуть IReadOnlyCollection, например? нет никакого криминала вернуть и IReadOnlyCollection, но IEnumerable более общий и вполне достаточный для большинства операций ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 03:11 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
stenfordты писал, что это "перечисление, которое может быть или бесконечным генератором, или иметь свойство одноразового применения и за его использование убивать надо". Вроде ничего из твоего бредогенератора не упустил. Дошло наконец, что не будет у репозитория никаких проблем со множественным перечислением IEnumerable? Гуд, одну шизу вылечили. А IQueryable вообще здесь из другой оперы, показывает только, что ты ничего кроме своего магазина с губной помадой не делал размазывая код запросов по всей системе Я от вас когда-нибудь дождусь связанной осмысленной речи, или вы так и будете быдлить? stenfordда потому-что отложенные вызовы в репозитории говнокодят только такие как ты писатели помадных магазинчиков. Трансляцию в запрос он сделать не может Получи сначала опыт разработки коммерческих систем посложнее магазинчиков и не используй слова, которые ты видел только в гугле У вас какой-то болезненный пунктик про помадные магазинчики, это пока всё что понятно из ваших комментариев. stenfordнет никакого криминала вернуть и IReadOnlyCollection, но IEnumerable более общий и вполне достаточный для большинства операций Вроде уже все сказал по этому поводу, эти интерфейсы не просто так добавили. А если бы вы изволили потрудиться, то нагуглили бы материалы по этой теме. А был бы опыт разработки чего-то большего чем, как вы там сказали, "помадных магазинчиков", тогда бы вас волновали вопросы производительности, правильной семантики и надёжности кода. Но видимо это не про вас. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 03:26 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttЯ от вас когда-нибудь дождусь связанной осмысленной речи, или вы так и будете быдлить? я спросил, дошло-ли до тебя что проблем с множественным перечислением у IEnumerable за которые ты собирался убивать у репозиториев не будет? Или переформулировать этот вопрос в еще более простой форме? hVosttВроде уже все сказал по этому поводу, эти интерфейсы не просто так добавили. А если бы вы изволили потрудиться, то нагуглили бы материалы по этой теме. А был бы опыт разработки чего-то большего чем, как вы там сказали, "помадных магазинчиков", тогда бы вас волновали вопросы производительности, правильной семантики и надёжности кода. Но видимо это не про вас. во фрейворках много чего появляется, это не означает что надо автоматически не думая хватать новые фичи и пихать их в каждую щель. IEnumerable вполне адекватный интефейс для репозиториев для возврата коллекций, а уж каких-то причин обязательно использовать IReadOnlyCollection вместо него и тем более нет ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 04:00 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttfkthat, В ином случае, репо для целей полной абстракции от хранилища работает очень плохо. Прям очень. Работает очень хорошо. Ты, походу, никак не понимаешь, что наружу там не торчит никакого ни LINQ ни EF, ничего подобного. Мы возвращаем только уже готовые объекты или коллекции объектов, выбранные по некоторым нужным нам критериям. Что там при этом внутри все это скрыто. Есть скажем интерфейс: Код: c# 1. 2. 3. 4. 5. 6.
У сиквельного репо реализации Find и Get будут одни, у монговского другие и т.п. А снаружи это без разницы и с т.ч. клиента выглядит одинаково. А в твоем ошибочном представлении репо это что-то такое: Код: c# 1. 2. 3.
И в таком, твоем репо, действителььно никакого смысла нет - что за резон просто тупо возвращать свойство контекста - да его и так можно напрямую брать. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 09:02 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthat, А зчем task, async в каждой строке кода? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 09:33 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthat, Весь вопрос в асинхронности. Если она нужна, то вы правы, если нет, то вполне возврат можно делать List или Collection. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 09:46 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123fkthat, Весь вопрос в асинхронности. Если она нужна, то вы правы, если нет, то вполне возврат можно делать List или Collection. Асинхронность нужна практически всегда, потому что репо работает с I/O. Не пойму тебя - как асинхронность может влиять на то возвращать ли IEnumerable или List? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 10:04 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthat, 1. Асинхронность мало когда нужна. По умолчанию код должен быть не асинхронный. Так в java. 2. Асинхронность это накладные расходы. Будет медленнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 10:10 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthat, Я много работаю с коллекциями по проекту (GIS). Там коллекции нужны для правки. IEnumerable только чтение? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 10:13 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthat, 4. Нужно быть всегда готовым заменить EF на NHiber. Боюсь там все по другому и код придется переписать. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 10:16 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123fkthat, 1. Асинхронность мало когда нужна. По умолчанию код должен быть не асинхронный. Так в java. 2. Асинхронность это накладные расходы. Будет медленнее. Ну эт потому что ты, наверное, под десктоп пишешь. А у нас веб и асинхронность нужна именно что всегда. При чем тут жава. В Си вон вообще объектов нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 10:19 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123fkthat, 4. Нужно быть всегда готовым заменить EF на NHiber. Боюсь там все по другому и код придется переписать. А вот как раз в этом случае все изменения и будут внутри репо, а все внешнее это вообще никак не затронет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 10:21 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatА у нас веб и асинхронность нужна именно что всегда. в java это делает контейнер аппСервера. Он запускает доп потоки когда нужно. Код не надо специально помечать символами.. Непонятно почему у MS так странно. fkthatПри чем тут жава.шарп жаваа и c++ братья))) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 10:32 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatPetro123fkthat, 4. Нужно быть всегда готовым заменить EF на NHiber. Боюсь там все по другому и код придется переписать. А вот как раз в этом случае все изменения и будут внутри репо, а все внешнее это вообще никак не затронет.делают два метода. Синхронный и асинхронный. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 10:33 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatА у нас веб и асинхронность нужна именно что всегда.зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 10:36 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123fkthatА у нас веб и асинхронность нужна именно что всегда. в java это делает контейнер аппСервера. Он запускает доп потоки когда нужно. Код не надо специально помечать символами.. Непонятно почему у MS так странно. fkthatПри чем тут жава.шарп жаваа и c++ братья))) У тебя просто полное непонимание, как работает async/await и для чего он, в случае веба, нужен. Рекомендую погуглить и разобраться в этом. С дополнительными потоками или выполнением чего-то в бекграунде он вообще никак не связан. Он просто позволяет намного более эффективно использовать уже имеющиеся потоки из пула. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 10:39 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123fkthatА у нас веб и асинхронность нужна именно что всегда.зачем? Затем, что потоков огранниченное количество и async/await дает возможность параллельно обрабатывать большее количество запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 10:42 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthat, Ты пропускаешь мои аргументы. MS рекумендует иметь по два метода. Асинхронно и синхронно. Одним не обойтись. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 10:59 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatPetro123пропущено... зачем? Затем, что потоков огранниченное количество и async/await дает возможность параллельно обрабатывать большее количество запросов.т.е. прикладник Вася должен заботится о параметрах железа в коде? Этим аппСервер занимается. Ну еще пул потоков MS. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 11:01 |
|
|
start [/forum/topic.php?fid=17&msg=39807382&tid=1349125]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
141ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 259ms |
0 / 0 |