|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttlove_bachдля ТС репозиторий не нужен. а это все "Бизнес-транзакции, саги, оптимистичные блокировки, версионирование..." к репозиторию не имеет отношения не желаете почитать книжки, исходный код проектов, получить опыт? прежде чем заявлять чего там к чему имеет или не имеет отношение, м? как-то очень вежливо для hVostt сформулировано. может это не ты? :) ТС делает обертку над EF, которую именует "Репозиторий". Он считает это нужным. Флаг ему в руки. Я так не считаю. "Бизнес-транзакции" - ну и где тут необходимость именно "Репозитория"? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2019, 05:37 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
vb_subКакие коллекции в итоге нужно принимать и возвращать? из репозитория в данном случае - IEnumerable, это read only сортируемая коллекция, которая обычно и требуется ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2019, 08:10 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
love_bachДмитрий Мухпропущено... Да, да, да... Но суть в том, что люди на своих проектах ничего этого не видят, а выводы делают. Хотя информации для изучения вагон и маленькая тележка. для ТС репозиторий не нужен ТС написал, что разбирает книгу "Pro Entity Framework Core 2 for ASP.NET Core MVC" замечательного автора Adam Freeman. Думаю он сам решит, что делать с прочитанным материалом и практическими примерами. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2019, 08:42 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Lessypvb_subКакие коллекции в итоге нужно принимать и возвращать? из репозитория в данном случае - IEnumerable, это read only сортируемая коллекция, которая обычно и требуетсяпочему только чтение. Люди счас любят всё и сразу) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2019, 10:13 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Lessypиз репозитория в данном случае - IEnumerable, это read only сортируемая коллекция, которая обычно и требуется повбывав бы за IEnumerable ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 00:46 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Для тех, кто в упор не понимает, почему нельзя возвращать IEnumerable, кроме редких исключений, только передавать их. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
IEnumerable это не коллекция, это перечисление. Которое может быть или бесконечным генератором, или иметь свойство одноразового применения. Использование IEnumerable и List не по назначению -- это один из признаков джуна. К моему величайшему сожалению, многие джунами остаются с опытом 5 и более лет. Не будьте такими :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 01:04 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVostt, Ну так если клиенту нужно что-то другое, то он возьмет уже и сам превратит IEnumerable в это что-то другое. Репозиторий как раз и не должен ничего заранее знать про то, что какому клиенту понадобится. А пример твой, так он просто косячный, потому что репо должен возвращать готовую коллекцию, но возвращать её как IEnumerable. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 01:20 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatНу так если клиенту нужно что-то другое, то он возьмет уже и сам превратит IEnumerable в это что-то другое. Это очень плохой аргумент. Потому что исходя из этого, нужно тогда вообще возвращать byte[], а клиент там пусть "превращает". Если по семантике возвращается коллекция, то это должна быть коллекция, а не бесконечное перечисления, так как у коллекции есть как минимум известное количество, а клиент ожидает, что по коллекции можно ходить много раз. Разумеется, что получив IEnumerable, клиент обязан превратить его в ToArray/ToList, и почувствовать себя при этом тупой обезьяной. fkthatРепозиторий как раз и не должен ничего заранее знать про то, что какому клиенту понадобится. Он не должен знать для чего, а что может понадобиться знать прямо таки обязан. Разрабатывая топор, вы обязаны знать, что для чего он будет применяться, но не обязаны знать для каких целей. Так что это ещё один плохой аргумент. fkthatА пример твой, так он просто косячный, потому что репо должен возвращать готовую коллекцию, но возвращать её как IEnumerable. Коллекция должна быть коллекцией, вести себя как коллекция и быть коллекцией. Подмена понятий в адекватной разработке не уместна. Не умение работать с типами это признак джуна, и оправданий тут быть не может. Косячишь в одном месте -- значит косячишь везде. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 01:52 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVostt, Ладно, лень спорить. Воля ваша - возвращайте что хотите, мне какая печаль-то ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 02:08 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVostt, а откуда ты сам взял это своё бесконечное перечисление? IEnumerable предоставляет простую итерацию над коллекцией. Он не является каким-то бесконечным перечислением. Ты видел вообще когда-нибудь в жизни то, чем тут народ пугаешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 06:46 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttКоллекция должна быть коллекцией, вести себя как коллекция и быть коллекцией. Подмена понятий в адекватной разработке не уместна. Не умение работать с типами это признак джуна, и оправданий тут быть не может. Косячишь в одном месте -- значит косячишь везде. ты-же даже не понял что тебе написали, отложенное исполнение IEnumerable возможно только в случае если репозиторий не привел результат в коллекцию, если-же коллекция уже сформирована но возвращена в виде IEnumerable - никакого множественного перечисления не возникнет, ты судя по-всему не понимаешь базовых вещей о том, как работают такие типы. Далее, если репозиторий все-же позволяет отложенное исполнение - это значит контекст там один на всех, и делать так плохая идея т.к. в EF он не потокобезопасен, но даже в этом случае это не повод возвращать коллекции вместо более общего типа обосновывая это тем, что ты не понимаешь как правильно работать с IEnumerable hVosttповбывав бы за IEnumerable да никого ты не убиваешь, судя по всему ты фрилансер т.к. за милю чувствуется отсутствие опыта работы в команде и навыков совместного обсуждения проблем, такая ослиная упертость в отстаивании каких-то совершенно диких идей и бабские истерики когда тебя тыкают мордой в твои ляпы обычно вырабатываются годами сидения в одиночку перед компьютером ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 08:32 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
stenfordДалее, если репозиторий все-же позволяет отложенное исполнение - это значит контекст там один на всех,железное правило? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 11:38 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123stenfordДалее, если репозиторий все-же позволяет отложенное исполнение - это значит контекст там один на всех,железное правило? Необязательно. Запросто можно нормально возвращать и отложенное. Просто надо с умом делать. Плохо: Код: c# 1. 2. 3. 4. 5.
А вот это будет норм: Код: c# 1. 2. 3. 4.
Хотя и второй вариант не есть гуд, т.к. проблемы с диспозом контекста и т.п. В общем, тут как и везде - надо просто понимать как это работает, и что ты делаешь. Самый распространенный баг, что я встречал, это: Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 13:25 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Дмитрий Муха откуда ты сам взял это своё бесконечное перечисление? IEnumerable предоставляет простую итерацию над коллекцией. Он не является каким-то бесконечным перечислением. Он может являться бесконечным перечислением. Также второй проход может возвращать совсем иной результат. Также если каждый следующий проход возвращает тоже самое, при этом будет выполняться повторные вычисления и ненужный расход памяти. Дмитрий МухТы видел вообще когда-нибудь в жизни то, чем тут народ пугаешь? Видел. Также профилировал издержки, связанные с использованием IEnumerable, конечно они решались на клиенте с помощью материализации последовательности. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 16:13 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
stenfordты-же даже не понял что тебе написали, отложенное исполнение IEnumerable возможно только в случае если репозиторий не привел результат в коллекцию Я уже писал что в этом случае делать нужно. Возвращать IQueryable. Если же у пациента на IQueryable болезненный (и абсолютно не обоснованный) пунктик, тогда он должен возвращать интерфейс коллекции, а не заниматься фигнёй. stenfordДалее, если репозиторий все-же позволяет отложенное исполнение - это значит контекст там один на всех Серьёзно? Прям один на всех? Это из какой такой реальности? Про lifetime scope слышали? stenfordда никого ты не убиваешь, судя по всему ты фрилансер т.к. за милю чувствуется отсутствие опыта работы в команде и навыков совместного обсуждения проблем, такая ослиная упертость в отстаивании каких-то совершенно диких идей и бабские истерики когда тебя тыкают мордой в твои ляпы обычно вырабатываются годами сидения в одиночку перед компьютером Аргументы, так и не начавшись, кончились, попёрло низкосортное быдлячество. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 16:18 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatА вот это будет норм: Код: c# 1. 2. 3. 4.
А теперь материализуйте результат асинхронно. Покажете как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 16:23 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttА теперь материализуйте результат асинхронно. Покажете как это сделать? А про асинхронность нигде не говорилось. Это просто был пример, что отложенное перечисление в принципе возможно. Я бы и сам такой код не стал писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 17:03 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
блеать, вот казалось бы. а и тут возможен срач! репо нахер не нужен, за редкими случаями. абстракция на хранилищем ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 17:21 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttfkthatА вот это будет норм: Код: c# 1. 2. 3. 4.
А теперь материализуйте результат асинхронно. Покажете как это сделать? ты несешь какую-то дичь. угомонись, уже ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 17:23 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
love_bachблеать, вот казалось бы. а и тут возможен срач! репо нахер не нужен, за редкими случаями. абстракция на хранилищем Я еще раз скажу - все зависит от масштабов. У нас проект, например, порядка трех десятков микросервисов, десятка полтора-два всевозможных хранилищ, внешние источники данных, счет всевозможным сущностям идет на сотни. Вот тогда начинаешь понимать, зачем все эти самые "абстракции над хранилищем" нужны. А интернет-магазинчик губной помады написать - там прослойка репо и вправду не нужна. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 17:45 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatPetro123железное правило? Необязательно. Запросто можно нормально возвращать и отложенное. Просто надо с умом делать.значит весь его пост вообще бездоказательный набор букв. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 21:57 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthathVosttА теперь материализуйте результат асинхронно. Покажете как это сделать? А про асинхронность нигде не говорилось. Это просто был пример, что отложенное перечисление в принципе возможно. Я бы и сам такой код не стал писать. В этом и дело, IEnumerable крайне абстрактная структура. Приделать асинхронную материализацию невозможно. Сделать трансляцию в запрос невозможно. Сменить способ реализации отложенного вычисления невозможно. Всё что можно, это получить курсор и пройтись вдоль последовательности только вперёд. И надеяться, что повторный проход не отстрелит обе ноги. Но всё это возможно сделать на IQueryable. Так какие проблемы вернуть интерфейс подходящей коллекции, если возвращаешь коллекцию? Не понимаю в упор, чего так многие упираются, в .NET целая пачка подходящих интерфейсов, все стандартизованные и поддерживаются на обоих современных платформах. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 00:36 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
love_bachты несешь какую-то дичь. угомонись, уже Книжка иди почитай, да. Может потом начнёшь понимать о чём речь. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 00:38 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttfkthatпропущено... А про асинхронность нигде не говорилось. Это просто был пример, что отложенное перечисление в принципе возможно. Я бы и сам такой код не стал писать. В этом и дело, IEnumerable крайне абстрактная структура. Приделать асинхронную материализацию невозможно. Сделать трансляцию в запрос невозможно. Сменить способ реализации отложенного вычисления невозможно. Всё что можно, это получить курсор и пройтись вдоль последовательности только вперёд. И надеяться, что повторный проход не отстрелит обе ноги. Но всё это возможно сделать на IQueryable. Так какие проблемы вернуть интерфейс подходящей коллекции, если возвращаешь коллекцию? Не понимаю в упор, чего так многие упираются, в .NET целая пачка подходящих интерфейсов, все стандартизованные и поддерживаются на обоих современных платформах. Вот, типичный пример кода, наподобии того, который у нас в репах: Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 01:06 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttТак какие проблемы вернуть интерфейс подходящей коллекции, если возвращаешь коллекцию? Не понимаю в упор, чего так многие упираются, в .NET целая пачка подходящих интерфейсов, все стандартизованные и поддерживаются на обоих современных платформах. Проблема в инкапсуляции. Сегодня внутри репо список, а завтра окажется HashSet. Что, каждый раз интерфейс менять и все что его использует переписывать? Это же вообще тогда писец. А IEnumerable это и есть самая-самая базовая абстракция для всех коллекций - абстракнее некуда. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 01:09 |
|
|
start [/forum/topic.php?fid=17&msg=39807246&tid=1349125]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
148ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 239ms |
total: | 502ms |
0 / 0 |