powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Передача лямбды в репозиторий. Где ошибка?
25 сообщений из 130, страница 5 из 6
Передача лямбды в репозиторий. Где ошибка?
    #39807481
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthat,
Ты пропускаешь мои аргументы.
MS рекумендует иметь по два метода. Асинхронно и синхронно. Одним не обойтись.
MS может рекомендовать хоть ссать стоя на коленях. Нам просто синхронные методы нахер не нужны, потому что все равно все контроллеры асинхронные и в итоге все через await вызывается. Рекомендация иметь пару методов это разве что для разработчиков каких-нибудь библиотек - чисто для удобства пользователя - вдруг кому надо будет синхронно вызвать. Хотя для этого достаточно всего лишь дописать к асинхронному вызову ".Result", или ".Wait". Кстати, сам МС этой рекомендации следует уже далеко не всегда - сейчас в коре уже полно апи где все вызовы только асинхронные.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807486
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatвсе контроллеры асинхронныето есть get запрос не ждет ответ?
Только не отсылай к картинке что надо освободить поток для другого запроса. Я в курсе.
...
Вы сдерали репо не быстрым но асинхронным на все все свои проекты.
А это чревато. Может потребоваться скорость, а это методы без xxxxAsync и List вместо IEnumerable.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807504
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthatвсе контроллеры асинхронныето есть get запрос не ждет ответ?

Пилять. Да разберись же ты уже в вопросе, или не спорь. Если ты десктоп пишешь, то тебе это все равно нафиг не упало. Ты про "select/poll" в юниксовых апи слышал когда-нибудь? Ну так вот, в случае операций i/o которых в веб-приложении овердофига async/await дает ту же самую выгоду. Запрос ХТТП в итоге все равно синхронен, потому что иначе быть не может, но при выполнении параллельно дофига запросов потоки используются более рационально, потому что поток, который бы в случае синхронного выполнения сидел бы и тупо ждал завершения ввода-вывода может переключиться на выполнение другого кода. В юниксах это называется "select/poll", в виндах "i/o completion port".
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807508
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЗапрос ХТТП в итоге все равно синхронен,верно.

fkthatпоток, который бы в случае синхронного выполнения сидел бы и тупо ждал завершения ввода-вывода
Теперь читай вариант решения. Без программиста:
авторПри запуске Tomcat создаст пул потоков и экземпляр сервлета. При поступлении запросов методы сервлета будут запускаться на потоках из пула. Сервлет не уничтожается до окончания работы сервера.

Потоки можно создавать самостоятельно, но зачем?
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807510
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
То есть поток не сидит и не ждет, как ты описал страшилку.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807514
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fkthat,
То есть поток не сидит и не ждет, как ты описал страшилку.

Ога. А метод твоего сервлета сел ждать запроса к БД и заблокировал поток. И нахер мне твой томкат и как там сделано, мы про asp.net говорим.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807515
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЕсли ты десктоп пишешь, то тебе это все равно нафиг не упало.
Задача повысить оклады сотрудников на 1.5.
Покажи важность асинхронности с IEnumerable против синхронности и List /Collection
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807517
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatИ нахер мне твой томкат и как там сделано, мы про asp.net говорим.ну, ты к юниксам сделал отсылку))
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807518
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatметод твоего сервлета сел ждать запроса к БД и заблокировал потоквремя запроа 0,1сек. Мало? Есть кэширование когда не из базы берет.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807522
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatНам просто синхронные методы нахер не нужныони быстрее))
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807527
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Я сливаю. Все, надоело. Ты победил.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807535
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123,

Я сливаю. Все, надоело. Ты победил.
неееет. Консенсус.
Я обязательно и твой асинхронный воткну себе))
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807537
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123пропущено...
то есть get запрос не ждет ответ?

Пилять. Да разберись же ты уже в вопросе, или не спорь.
Не трать ты на него время :)
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39807538
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЯ сливаю. Все, надоело. Ты победил.
Молоток :)
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39808168
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenfordя спросил, дошло-ли до тебя что проблем с множественным перечислением у IEnumerable за которые ты собирался убивать у репозиториев не будет? Или переформулировать этот вопрос в еще более простой форме?

Я уже привёл список проблем, связанных с IEnumerable. Зачем вы просите меня повторяться? Если с чем не согласны, напишите. Если непонятно, перечитайте.

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

Я не призывал что-то делать автоматически и не думая, да аргументов я до сих пор не вижу кроме того, что вы считаете IEnumerable адекватным интерфейсом. Жаль вы до сих пор не можете пояснить почему.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39808175
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatРаботает очень хорошо. Ты, походу, никак не понимаешь, что наружу там не торчит никакого ни LINQ ни EF, ничего подобного. Мы возвращаем только уже готовые объекты или коллекции объектов, выбранные по некоторым нужным нам критериям. Что там при этом внутри все это скрыто. Есть скажем интерфейс:
Код: c#
1.
2.
3.
4.
5.
6.
public interface IFooRepo {
   ...
   Task<IEnumerable<Foo>> FindAsync(Query query);
   Task<Foo> GetAsync(Guid id);
   ...
}



У сиквельного репо реализации Find и Get будут одни, у монговского другие и т.п. А снаружи это без разницы и с т.ч. клиента выглядит одинаково.

Я всё равно не вижу, почему не вернуть интерфейс коллекции, если никаких отложенных вычислений нет, и вы возвращаете ни что иное, как коллекции. И по семантике, и по факту.

Но вторая проблема здесь заключается в том, что такое у вас Foo? Это агрегат, сущность? Есть ли возможность получить корень агрегата полностью? Или такое поведение у вас инкапсулируется в объекте Query?

Что делать с пейджингом? Приведённый вами интерфейс в упор этого не поддерживает, даже при всём желании.

fkthatУ сиквельного репо реализации Find и Get будут одни, у монговского другие и т.п. А снаружи это без разницы и с т.ч. клиента выглядит одинаково.

Это безусловно хорошо. Таким и должен быть репозиторий.


fkthatА в твоем ошибочном представлении репо это что-то такое:
Код: c#
1.
2.
3.
public interface IFooRepo {
   IQueryable<Foo> Get();
}



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

А с чего вы решили, что я буду тупо свойство контекста возвращать? И с чего вы решили, что IQueryable не может ходить через EF, Mongo и т.д. и т.п.? Эта та же абстракция, что и ваш Query.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39808181
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЯ всё равно не вижу, почему не вернуть интерфейс коллекции, если никаких отложенных вычислений нет, и вы возвращаете ни что иное, как коллекции. И по семантике, и по факту.

Сразу вопрос. Какой именно коллекции? Мне нравится Array, Васе нравится List, а Вове, так вообще HashSet. Потом, мне например, удобно внутри репо работать с массивом, я вот беру и возвращаю массив. А потом алгоритм поменялся, и стало удобно возвращать List. Что мне делать? Городить костыли внутри репо, или ломать все что снаружи? Это другая сторона инкапсуляции - не тольько спрятать что должно быть спрятано, но и иметь возможность это спрятанное поменять, не затрагивая ничего внешнего.
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39808193
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatудобно внутри репо работать с массивом, я вот беру и возвращаю массивну ты прям пошутил))
Нам много не надо, свободу давай (с)
...
Рейтинг: 0 / 0
Передача лямбды в репозиторий. Где ошибка?
    #39808493
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatСразу вопрос. Какой именно коллекции? Мне нравится Array, Васе нравится List, а Вове, так вообще HashSet.

Это не вопрос вкусов. Возвращать нужно наиболее абстрактный интерфейс, семантически отвечающий задаче, и не вызывающий проблем с производительностью и сопровождением.

IReadOnlyCollection появился в библитеке, к сожалению, слишком поздно. К тому времени многие привыкли к IEnumerable, наплевав на семантику, производительность, эффективность и сопровождение.

Почему всегда в спорах в инженерной дисциплине часто скатываются к фломастерам? Что за странная тенденция такая, нездоровая.


fkthatПотом, мне например, удобно внутри репо работать с массивом, я вот беру и возвращаю массив. А потом алгоритм поменялся, и стало удобно возвращать List. Что мне делать?

И массив и список и другие коллекции реализуют интерфейс IReadOnlyCollection. Только он, как интерфейс, гарантирует, что это конечный список, так как имеет свойство количества, и прямо декларирует, что он только для чтения, что означает возможность безопасно закешировать результат.


fkthatГородить костыли внутри репо, или ломать все что снаружи? Это другая сторона инкапсуляции - не тольько спрятать что должно быть спрятано, но и иметь возможность это спрятанное поменять, не затрагивая ничего внешнего.

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

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

А что делать, если вам нужна проекция? Или огромное число проекций? Или проекции, которые на стадии разработки неизвестны? Будете периодически лазить и допиливать репо? Ох, как же это бьёт в ущерб идеи полной независимости и инкапсуляции.

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

Я не к тому, что IQueryable интерфейс это лучший способ работы с данными на все времена. Не всегда он подходит. Я делал проекты на IQueryable, большие и на CQRS и c EventSourcing, и даже было дело на ActiveObject.

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

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

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


Не учи людей плохому. Он декларирует только то. что посредством него, ты ничего не сможешь добавить.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
            SortedList<int, string> keyValues = new SortedList<int, string>()
            {
                {1,"1" },
                {2,"2" }
            };

            IReadOnlyCollection<KeyValuePair<int, string>> roc = keyValues;

            Console.WriteLine(roc.Count);

            keyValues.Add(3, "3");

            Console.WriteLine(roc.Count);


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


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

Верно, что и означает read only,


ЕвгенийВЕсли полагать, что Count никогда не измениться, можно так выстрелить себе в ногу.

Так полагать можно про всё что угодно, и даже про "неизменяемые" строки. Контракт означает, что он ДОЛЖЕН соблюдаться, и что этого МОЖНО ожидать. Но если как ты говоришь, не верить контракту, то далеко ты не продвинешься, по-больше try/catch, фреймворку тоже доверять нельзя. Откуда ты знаешь, что вместо открытого дескриптора файла тебе не вернут просто какое-то рандомное число? Никогда не знаешь.

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


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