powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Передача лямбды в репозиторий. Где ошибка?
25 сообщений из 130, страница 3 из 6
Передача лямбды в репозиторий. Где ошибка?
    #39803684
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttlove_bachдля ТС репозиторий не нужен. а это все "Бизнес-транзакции, саги, оптимистичные блокировки, версионирование..." к репозиторию не имеет отношения

не желаете почитать книжки, исходный код проектов, получить опыт?
прежде чем заявлять чего там к чему имеет или не имеет отношение, м?

как-то очень вежливо для hVostt сформулировано. может это не ты? :)
ТС делает обертку над EF, которую именует "Репозиторий". Он считает это нужным. Флаг ему в руки. Я так не считаю.
"Бизнес-транзакции" - ну и где тут необходимость именно "Репозитория"?
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39803707
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subКакие коллекции в итоге нужно принимать и возвращать?
из репозитория в данном случае - IEnumerable, это read only сортируемая коллекция, которая обычно и требуется
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39803723
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachДмитрий Мухпропущено...
Да, да, да...

Но суть в том, что люди на своих проектах ничего этого не видят, а выводы делают.
Хотя информации для изучения вагон и маленькая тележка.

для ТС репозиторий не нужен
ТС написал, что разбирает книгу "Pro Entity Framework Core 2 for ASP.NET Core MVC" замечательного автора Adam Freeman.
Думаю он сам решит, что делать с прочитанным материалом и практическими примерами.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39803775
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessypvb_subКакие коллекции в итоге нужно принимать и возвращать?
из репозитория в данном случае - IEnumerable, это read only сортируемая коллекция, которая обычно и требуетсяпочему только чтение. Люди счас любят всё и сразу)
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807246
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessypиз репозитория в данном случае - IEnumerable, это read only сортируемая коллекция, которая обычно и требуется

повбывав бы за IEnumerable
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807248
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для тех, кто в упор не понимает, почему нельзя возвращать IEnumerable, кроме редких исключений, только передавать их.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    public class Repeater<T>
    {
        private readonly T _value;
        private int _count;

        public Repeater(T value, int count)
        {
            _value = value;
            _count = count;
        }

        public IEnumerable<T> GetList()
        {
            while (_count-- > 0)
            {
                yield return _value;
            }
        }
    }



IEnumerable это не коллекция, это перечисление. Которое может быть или бесконечным генератором, или иметь свойство одноразового применения.

Использование IEnumerable и List не по назначению -- это один из признаков джуна. К моему величайшему сожалению, многие джунами остаются с опытом 5 и более лет.

Не будьте такими :)
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807257
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Ну так если клиенту нужно что-то другое, то он возьмет уже и сам превратит IEnumerable в это что-то другое. Репозиторий как раз и не должен ничего заранее знать про то, что какому клиенту понадобится.

А пример твой, так он просто косячный, потому что репо должен возвращать готовую коллекцию, но возвращать её как IEnumerable.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807258
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatНу так если клиенту нужно что-то другое, то он возьмет уже и сам превратит IEnumerable в это что-то другое.

Это очень плохой аргумент. Потому что исходя из этого, нужно тогда вообще возвращать byte[], а клиент там пусть "превращает". Если по семантике возвращается коллекция, то это должна быть коллекция, а не бесконечное перечисления, так как у коллекции есть как минимум известное количество, а клиент ожидает, что по коллекции можно ходить много раз.

Разумеется, что получив IEnumerable, клиент обязан превратить его в ToArray/ToList, и почувствовать себя при этом тупой обезьяной.

fkthatРепозиторий как раз и не должен ничего заранее знать про то, что какому клиенту понадобится.

Он не должен знать для чего, а что может понадобиться знать прямо таки обязан.

Разрабатывая топор, вы обязаны знать, что для чего он будет применяться, но не обязаны знать для каких целей.

Так что это ещё один плохой аргумент.

fkthatА пример твой, так он просто косячный, потому что репо должен возвращать готовую коллекцию, но возвращать её как IEnumerable.

Коллекция должна быть коллекцией, вести себя как коллекция и быть коллекцией. Подмена понятий в адекватной разработке не уместна. Не умение работать с типами это признак джуна, и оправданий тут быть не может. Косячишь в одном месте -- значит косячишь везде.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807260
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Ладно, лень спорить. Воля ваша - возвращайте что хотите, мне какая печаль-то
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807264
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

а откуда ты сам взял это своё бесконечное перечисление?

IEnumerable предоставляет простую итерацию над коллекцией. Он не является каким-то бесконечным перечислением.

Ты видел вообще когда-нибудь в жизни то, чем тут народ пугаешь?
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807268
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttКоллекция должна быть коллекцией, вести себя как коллекция и быть коллекцией. Подмена понятий в адекватной разработке не уместна. Не умение работать с типами это признак джуна, и оправданий тут быть не может. Косячишь в одном месте -- значит косячишь везде.
ты-же даже не понял что тебе написали, отложенное исполнение IEnumerable возможно только в случае если репозиторий не привел результат в коллекцию, если-же коллекция уже сформирована но возвращена в виде IEnumerable - никакого множественного перечисления не возникнет, ты судя по-всему не понимаешь базовых вещей о том, как работают такие типы.
Далее, если репозиторий все-же позволяет отложенное исполнение - это значит контекст там один на всех, и делать так плохая идея т.к. в EF он не потокобезопасен, но даже в этом случае это не повод возвращать коллекции вместо более общего типа обосновывая это тем, что ты не понимаешь как правильно работать с IEnumerable

hVosttповбывав бы за IEnumerable

да никого ты не убиваешь, судя по всему ты фрилансер т.к. за милю чувствуется отсутствие опыта работы в команде и навыков совместного обсуждения проблем, такая ослиная упертость в отстаивании каких-то совершенно диких идей и бабские истерики когда тебя тыкают мордой в твои ляпы обычно вырабатываются годами сидения в одиночку перед компьютером
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807286
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenfordДалее, если репозиторий все-же позволяет отложенное исполнение - это значит контекст там один на всех,железное правило?
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807305
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123stenfordДалее, если репозиторий все-же позволяет отложенное исполнение - это значит контекст там один на всех,железное правило?
Необязательно. Запросто можно нормально возвращать и отложенное. Просто надо с умом делать.

Плохо:
Код: c#
1.
2.
3.
4.
5.
private _context = new Context();

public IEnumerable<SomeData> GetSomeData() {
   return _context.SomeData;
}



А вот это будет норм:
Код: c#
1.
2.
3.
4.
public IEnumerable<SomeData> GetSomeData() {
   var context = new Context();
   return context.SomeData;
}



Хотя и второй вариант не есть гуд, т.к. проблемы с диспозом контекста и т.п. В общем, тут как и везде - надо просто понимать как это работает, и что ты делаешь. Самый распространенный баг, что я встречал, это:
Код: c#
1.
2.
3.
4.
5.
public IEnumerable<Entity> GetEntities() {
    using(var context = new Context()) {
        return context.Entities;
    }
}
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807325
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Муха откуда ты сам взял это своё бесконечное перечисление?
IEnumerable предоставляет простую итерацию над коллекцией. Он не является каким-то бесконечным перечислением.

Он может являться бесконечным перечислением. Также второй проход может возвращать совсем иной результат. Также если каждый следующий проход возвращает тоже самое, при этом будет выполняться повторные вычисления и ненужный расход памяти.

Дмитрий МухТы видел вообще когда-нибудь в жизни то, чем тут народ пугаешь?


Видел. Также профилировал издержки, связанные с использованием IEnumerable, конечно они решались на клиенте с помощью материализации последовательности.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807326
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenfordты-же даже не понял что тебе написали, отложенное исполнение IEnumerable возможно только в случае если репозиторий не привел результат в коллекцию

Я уже писал что в этом случае делать нужно. Возвращать IQueryable.
Если же у пациента на IQueryable болезненный (и абсолютно не обоснованный) пунктик, тогда он должен возвращать интерфейс коллекции, а не заниматься фигнёй.


stenfordДалее, если репозиторий все-же позволяет отложенное исполнение - это значит контекст там один на всех

Серьёзно? Прям один на всех? Это из какой такой реальности? Про lifetime scope слышали?


stenfordда никого ты не убиваешь, судя по всему ты фрилансер т.к. за милю чувствуется отсутствие опыта работы в команде и навыков совместного обсуждения проблем, такая ослиная упертость в отстаивании каких-то совершенно диких идей и бабские истерики когда тебя тыкают мордой в твои ляпы обычно вырабатываются годами сидения в одиночку перед компьютером

Аргументы, так и не начавшись, кончились, попёрло низкосортное быдлячество.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807328
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatА вот это будет норм:
Код: c#
1.
2.
3.
4.
public IEnumerable<SomeData> GetSomeData() {
   var context = new Context();
   return context.SomeData;
}



А теперь материализуйте результат асинхронно. Покажете как это сделать?
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807330
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttА теперь материализуйте результат асинхронно. Покажете как это сделать?
А про асинхронность нигде не говорилось. Это просто был пример, что отложенное перечисление в принципе возможно. Я бы и сам такой код не стал писать.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807332
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блеать, вот казалось бы. а и тут возможен срач!
репо нахер не нужен, за редкими случаями. абстракция на хранилищем
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807333
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttfkthatА вот это будет норм:
Код: c#
1.
2.
3.
4.
public IEnumerable<SomeData> GetSomeData() {
   var context = new Context();
   return context.SomeData;
}



А теперь материализуйте результат асинхронно. Покажете как это сделать?

ты несешь какую-то дичь. угомонись, уже
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807343
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachблеать, вот казалось бы. а и тут возможен срач!
репо нахер не нужен, за редкими случаями. абстракция на хранилищем
Я еще раз скажу - все зависит от масштабов. У нас проект, например, порядка трех десятков микросервисов, десятка полтора-два всевозможных хранилищ, внешние источники данных, счет всевозможным сущностям идет на сотни. Вот тогда начинаешь понимать, зачем все эти самые "абстракции над хранилищем" нужны. А интернет-магазинчик губной помады написать - там прослойка репо и вправду не нужна.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807352
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123железное правило?
Необязательно. Запросто можно нормально возвращать и отложенное. Просто надо с умом делать.значит весь его пост вообще бездоказательный набор букв.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807369
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthathVosttА теперь материализуйте результат асинхронно. Покажете как это сделать?
А про асинхронность нигде не говорилось. Это просто был пример, что отложенное перечисление в принципе возможно. Я бы и сам такой код не стал писать.

В этом и дело, IEnumerable крайне абстрактная структура. Приделать асинхронную материализацию невозможно. Сделать трансляцию в запрос невозможно. Сменить способ реализации отложенного вычисления невозможно.

Всё что можно, это получить курсор и пройтись вдоль последовательности только вперёд. И надеяться, что повторный проход не отстрелит обе ноги.

Но всё это возможно сделать на IQueryable.

Так какие проблемы вернуть интерфейс подходящей коллекции, если возвращаешь коллекцию? Не понимаю в упор, чего так многие упираются, в .NET целая пачка подходящих интерфейсов, все стандартизованные и поддерживаются на обоих современных платформах.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807370
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachты несешь какую-то дичь. угомонись, уже

Книжка иди почитай, да. Может потом начнёшь понимать о чём речь.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807375
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttfkthatпропущено...

А про асинхронность нигде не говорилось. Это просто был пример, что отложенное перечисление в принципе возможно. Я бы и сам такой код не стал писать.

В этом и дело, IEnumerable крайне абстрактная структура. Приделать асинхронную материализацию невозможно. Сделать трансляцию в запрос невозможно. Сменить способ реализации отложенного вычисления невозможно.

Всё что можно, это получить курсор и пройтись вдоль последовательности только вперёд. И надеяться, что повторный проход не отстрелит обе ноги.

Но всё это возможно сделать на IQueryable.

Так какие проблемы вернуть интерфейс подходящей коллекции, если возвращаешь коллекцию? Не понимаю в упор, чего так многие упираются, в .NET целая пачка подходящих интерфейсов, все стандартизованные и поддерживаются на обоих современных платформах.

Вот, типичный пример кода, наподобии того, который у нас в репах:

Код: c#
1.
2.
3.
4.
5.
public async Task<IEnumerable<Foo>> GetFoos() {
    using(var context = new Context()) {
        return await context.Foos.ToListAsync();
    }
}
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807376
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttТак какие проблемы вернуть интерфейс подходящей коллекции, если возвращаешь коллекцию? Не понимаю в упор, чего так многие упираются, в .NET целая пачка подходящих интерфейсов, все стандартизованные и поддерживаются на обоих современных платформах.

Проблема в инкапсуляции. Сегодня внутри репо список, а завтра окажется HashSet. Что, каждый раз интерфейс менять и все что его использует переписывать? Это же вообще тогда писец. А IEnumerable это и есть самая-самая базовая абстракция для всех коллекций - абстракнее некуда.
...
Рейтинг: 0 / 0
25 сообщений из 130, страница 3 из 6
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Передача лямбды в репозиторий. Где ошибка?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]