|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Разбираю Pro Entity Framework Core 2 for ASP.NET Core MVC замечательного автора Adam Freeman. Строится модель, например: public class Product { public long Id { get; set; } public string Name { get; set; } [Column(TypeName = "decimal(18, 2)")] public decimal PurchasePrice { get; set; } } Строим класс репозитория (объявление контекста и интерфейса- опускаю): Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
В контроллере идет вызов: Код: c# 1.
При этом формируется SQL: Код: sql 1. 2. 3.
Но если я переписываю репозиторий (): Код: c# 1. 2. 3. 4. 5. 6.
[то получаю вполне ожидаемый код, который ведет отбор на сервере базы данных: Код: sql 1. 2. 3.
При этом результаты вывода - одинаковые. Почему передача лямбды в репозиторий приводит к фильтрации строк на стороне EF а не SQL? Где я ошибаюсь? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 06:52 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Maksimka-27, Скорее всего проблема в отложенном выполнении, реальное преобразование в запрос происходит на момент вычисления всей цепочки, ваш внешний func не может заинжектиться корректно, что логично. Надо смотреть в доке как разбирается Linq ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 08:25 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
пробуй Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 08:58 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Shocker.Pro, Помогло, Спасибо!!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 10:03 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Maksimka-27Разбираю Pro Entity Framework Core 2 for ASP.NET Core MVC замечательного автора Adam Freeman.хмм... А MS со своим кодом ниже в пику ему делает свои справки и демки? dotnet ef dbcontext scaffold xxxxxxxxxx И получаем вместо репозитория класс XXXContext.cs ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 10:53 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Фримен упирает на модульное тестирование, поэтому интерфейс для репозитория в примере - вполне в его стиле. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 10:56 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Shocker.Pro, Спс. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 11:02 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Shocker.Proпробуй Код: c# 1.
+1 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 11:46 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Maksimka-27 Код: c# 1.
IQueryable ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 12:41 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttMaksimka-27 Код: c# 1.
IQueryableтогда .ToList(); будет лишним? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 12:58 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123.ToList(); будет лишним? делать ToList() и возвращать IEnumerable сродни тому, как плюнуть в лицо :) хотя бы ICollection, хотя желательно IReadOnlyCollection касательно озвученной проблемы, правильно решается с помощью паттерна спецификаций, например: https://enterprisecraftsmanship.com/2016/02/08/specification-pattern-c-implementation/ ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 14:14 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttделать ToList() и возвращать IEnumerable сродни тому, как плюнуть в лицо :)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 15:02 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttделать ToList() и возвращать IEnumerable сродни тому, как плюнуть в лицо :)Кстати, слышал как-то формулу - параметр метода должен быть максимально абстрактного типа, результат - максимально конкретного. Скажи, гуру, ты согласен с этой формулой? То есть, в данном случае, вернуть прямо таки List<>. Если потребителю нужен ICollection - он сам выполнит приведение. А может ему понадобится непосредственно функционал листа. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 15:07 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Shocker.ProЕсли потребителю нужен ICollection - он сам выполнит приведение.с этим не согласен. Возвращать нужно то что просят выше. Чтобы 200 вызовов не приводить и кода не добавлять. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 15:13 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Shocker.ProКстати, слышал как-то формулу - параметр метода должен быть максимально абстрактного типа, результат - максимально конкретного. Скажи, гуру, ты согласен с этой формулой? Главное не путать абстракцию с семантикой. IEnumerable -- это бесконечная последовательность, в качестве которой может выступать как коллекция, так и генератор, поэтому он не является абстракцией коллекции. самая максимальная абстракция коллекции в C# это IReadOnlyCollection. Shocker.ProТо есть, в данном случае, вернуть прямо таки List<>. Ни в коем случае. List это реализация. Вообще самые злостные крайности джунов это возвращать IEnumerable, или List. Ругаю очень за такое. Shocker.ProЕсли потребителю нужен ICollection - он сам выполнит приведение. А может ему понадобится непосредственно функционал листа. Я говорю конкретно про контракты. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2019, 23:59 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttНи в коем случае. List это реализация. Вообще самые злостные крайности джунов это возвращать IEnumerable, или List. Ругаю очень за такое.не понял. Я налево и направо возвращаю. А что делать, если наверху правят эту коллекцию? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 07:48 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123hVosttНи в коем случае. List это реализация. Вообще самые злостные крайности джунов это возвращать IEnumerable, или List. Ругаю очень за такое.не понял. Я налево и направо возвращаю. А что делать, если наверху правят эту коллекцию? надо вернуть метаданные - адрес памяти, длина блока памяти а там пусть как хотят так и интерпретируют а то всякие там коллекции и т.д. не кошерны ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 09:52 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
ViPRosнадо вернуть метаданные - адрес памяти, длина блока памятив Net есть Pointer или *p ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 10:12 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123не понял. Я налево и направо возвращаю. А что делать, если наверху правят эту коллекцию? если коллекция может правиться, то ICollection. если к этому нужен индексированный доступ, то IList. контракты должны быть максимально абстрактными, но не нарушать семантику. а то можно вообще везде object возвращать, чё мелочиться-то? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 11:35 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttIQueryable руки отрубать за такое надо. Логика запросов расползется по всем слоям убив поддерживаемость и производительность ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 12:59 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
stenfordhVosttIQueryable руки отрубать за такое надо. Логика запросов расползется по всем слоям убив поддерживаемость и производительность серьёзно? за много лет мне ещё никто не доказал и не показал, что там "убивается" в поддержке и производительности IQueryable это абстрактный контракт слоя работы с данными. ни чем не отличается от +100500 других костылей и способов, просто у отдельных людей откуда-то возникает панический страх, который они не могут ни понять, ни объяснять. работай со слоем доступа к данным из слоя логики, не тащи на клиентский слой, в чём проблемы? это прям когнитивный диссонанс. видишь как человек боится юзать IQueryable, потом смотришь а он там прокидывает IEnumerable или вообще List -- дабл фейспалм. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 13:06 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttсерьёзно? за много лет мне ещё никто не доказал и не показал, что там "убивается" в поддержке и производительности IQueryable это абстрактный контракт слоя работы с данными. ни чем не отличается от +100500 других костылей и способов, просто у отдельных людей откуда-то возникает панический страх, который они не могут ни понять, ни объяснять. работай со слоем доступа к данным из слоя логики, не тащи на клиентский слой, в чём проблемы? это прям когнитивный диссонанс. видишь как человек боится юзать IQueryable, потом смотришь а он там прокидывает IEnumerable или вообще List -- дабл фейспалм. то, что ты чего-то там в своей жизни не видел не влияет на то, как эти вещи работают, если у тебя создан репозиторий - то логика запросов должна содержаться в нем по указанным выше причинам, в простых случаях он не нужен и никто не мешает работать с базой из слоя логики, а кашу и репозитория и логики запросов в нескольких слоях лепят только студенты на первых годах своей работы пока не поднаберутся опыта ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 13:32 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
stenfordто, что ты чего-то там в своей жизни не видел не влияет на то, как эти вещи работают, если у тебя создан репозиторий - то логика запросов должна содержаться в нем по указанным выше причинам, в простых случаях он не нужен и никто не мешает работать с базой из слоя логики, а кашу и репозитория и логики запросов в нескольких слоях лепят только студенты на первых годах своей работы пока не поднаберутся опыта абосолютно ни о чём. IQueryable это абстракция. ни чем не хуже любых созданных вами кривых поделок, и не надо тут залечивать про кашу, не умеете -- не варите. про репозитории вида god queries object уже писалось не раз, обсуждалось. то, что вы слыхом про это не слыхивали, проблемы только ваши. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 15:40 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
stenfordна первых годах своей работы пока не поднаберутся опыта как я вижу, многим и десятки лет опыта ничего не дают. как лепят свои унылые поделки, которые освоили на студенческих примерах, так и продолжают лепить до посинения. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2019, 15:41 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Maksimka-27Разбираю Pro Entity Framework Core 2 for ASP.NET Core MVC замечательного автора Adam Freeman. Строится модель, например: public class Product { public long Id { get; set; } public string Name { get; set; } [Column(TypeName = "decimal(18, 2)")] public decimal PurchasePrice { get; set; } } Строим класс репозитория (объявление контекста и интерфейса- опускаю): Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
В контроллере идет вызов: Код: c# 1.
При этом формируется SQL: Код: sql 1. 2. 3.
Но если я переписываю репозиторий (): Код: c# 1. 2. 3. 4. 5. 6.
[то получаю вполне ожидаемый код, который ведет отбор на сервере базы данных: Код: sql 1. 2. 3.
При этом результаты вывода - одинаковые. Почему передача лямбды в репозиторий приводит к фильтрации строк на стороне EF а не SQL? Где я ошибаюсь? а нафига вообще такой репозиторий? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 19:12 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
love_bachа нафига вообще такой репозиторий?чтобы тестить удобно было). А писать сложно). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 19:24 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123love_bachа нафига вообще такой репозиторий?чтобы тестить удобно было). А писать сложно). EF context можно мокнуть при желании. а все условия фильтрации, да и не только, там из каробки есть. паттерно-болезнь ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2019, 19:50 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
love_bachа нафига вообще такой репозиторий? затем, что вместо кодирования сотен/тысяч строк бессмысленного кода мокинга EF и хождения по заботливо разложенным граблям этого фрейворка можно писать бизнес-логику и другие полезные вещи ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2019, 02:28 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttShocker.ProКстати, слышал как-то формулу - параметр метода должен быть максимально абстрактного типа, результат - максимально конкретного. Скажи, гуру, ты согласен с этой формулой? Главное не путать абстракцию с семантикой. IEnumerable -- это бесконечная последовательность, в качестве которой может выступать как коллекция, так и генератор, поэтому он не является абстракцией коллекции. самая максимальная абстракция коллекции в C# это IReadOnlyCollection. Shocker.ProТо есть, в данном случае, вернуть прямо таки List<>. Ни в коем случае. List это реализация. Вообще самые злостные крайности джунов это возвращать IEnumerable, или List. Ругаю очень за такое. Shocker.ProЕсли потребителю нужен ICollection - он сам выполнит приведение. А может ему понадобится непосредственно функционал листа. Я говорю конкретно про контракты. Какие коллекции в итоге нужно принимать и возвращать? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2019, 12:50 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
love_bachEF context можно мокнуть при желании. а все условия фильтрации, да и не только, там из каробки есть. паттерно-болезнь Имеет смысл, когда, например, несколько разных стореджей и не для всех годится EF. Чтобы всю работу с данными сделать единообразной. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2019, 13:13 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthat, По русски напиши - две разные базы в одном проекте. Только я не видел такого никогда). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2019, 13:34 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123fkthat, По русски напиши - две разные базы в одном проекте. Только я не видел такого никогда). "Ты просто мал и глуп, и не видал больших за..уп" (с) У нас, например, одновременно сиквел, монга, и еще какая-то экзотика от амазона, названия которой я даже и не ведаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2019, 13:50 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthat, В одном проекте? Значит плохая архитектура)) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2019, 14:15 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123fkthat, В одном проекте? Значит плохая архитектура)) Просто проект большой. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2019, 15:50 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatlove_bachEF context можно мокнуть при желании. а все условия фильтрации, да и не только, там из каробки есть. паттерно-болезнь Имеет смысл, когда, например, несколько разных стореджей и не для всех годится EF. Чтобы всю работу с данными сделать единообразной. а будет ли оно, это однообразие? один полноценно поддерживание LINQ, другой частично, третий нет. один работает с SQL, другой нет. в одном реализован UoW, в другом нет. и т.д. и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2019, 07:04 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatPetro123fkthat, По русски напиши - две разные базы в одном проекте. Только я не видел такого никогда). "Ты просто мал и глуп, и не видал больших за..уп" (с) У нас, например, одновременно сиквел, монга, и еще какая-то экзотика от амазона, названия которой я даже и не ведаю. Dynamodb ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2019, 09:27 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2019, 09:30 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatlove_bachEF context можно мокнуть при желании. а все условия фильтрации, да и не только, там из каробки есть. паттерно-болезнь Имеет смысл, когда, например, несколько разных стореджей и не для всех годится EF. Чтобы всю работу с данными сделать единообразной. +1 А ещё когда несколько уровней хранения: память, распределенный кэш, сервис, база... При этом на доступ к данным необходимо наложить распределенные блокировки :) Да и обсуждалось уже на этом форуме то, зачем нужен репозитории. В книгах и статьях обсосано. Но народ все продолжает линию: мне вот сейчас не нужен, итак вроде все работает, значит вообще никому не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2019, 09:33 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2019, 09:40 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
skyANAДа и обсуждалось уже на этом форуме то, зачем нужен репозитории. В книгах и статьях обсосано. Нужен абстрактный слой доступа к данным. В общем и целом паттерн Репозиторий, среди сотен его интерпретаций, лишь одна из реализаций подобного слоя. И не всем он подходит, а при неправильном употреблении превращается больше в проблему, чем в преимущества (repository god object, например). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2019, 17:16 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
skyANAПри этом на доступ к данным необходимо наложить распределенные блокировки :) Бизнес-транзакции, саги, оптимистичные блокировки, версионирование... Как бы распределённые блокировки это не обязательно про данные, если более 1 апп ноды даже с одной БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2019, 17:18 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttskyANAДа и обсуждалось уже на этом форуме то, зачем нужен репозитории. В книгах и статьях обсосано. Нужен абстрактный слой доступа к данным. В общем и целом паттерн Репозиторий, среди сотен его интерпретаций, лишь одна из реализаций подобного слоя. Да, но пациенты даже одну реализацию осилить не могут. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2019, 20:01 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttИ не всем он подходит, а при неправильном употреблении превращается больше в проблему, чем в преимущества (repository god object, например). Превращается, когда шаблон "прямые руки" забывают применять :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2019, 20:03 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttskyANAПри этом на доступ к данным необходимо наложить распределенные блокировки :) Бизнес-транзакции, саги, оптимистичные блокировки, версионирование... Как бы распределённые блокировки это не обязательно про данные, если более 1 апп ноды даже с одной БД.Да, да, да... Но суть в том, что люди на своих проектах ничего этого не видят, а выводы делают. Хотя информации для изучения вагон и маленькая тележка. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2019, 20:06 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Дмитрий МухhVosttпропущено... Бизнес-транзакции, саги, оптимистичные блокировки, версионирование... Как бы распределённые блокировки это не обязательно про данные, если более 1 апп ноды даже с одной БД.Да, да, да... Но суть в том, что люди на своих проектах ничего этого не видят, а выводы делают. Хотя информации для изучения вагон и маленькая тележка. для ТС репозиторий не нужен. а это все "Бизнес-транзакции, саги, оптимистичные блокировки, версионирование..." к репозиторию не имеет отношения ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2019, 17:56 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Дмитрий МухhVosttпропущено... Бизнес-транзакции, саги, оптимистичные блокировки, версионирование... Как бы распределённые блокировки это не обязательно про данные, если более 1 апп ноды даже с одной БД.Да, да, да... Но суть в том, что люди на своих проектах ничего этого не видят , а выводы делают. Хотя информации для изучения вагон и маленькая тележка. будь проще, не бомби ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2019, 17:58 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Дмитрий МухhVosttпропущено... Нужен абстрактный слой доступа к данным. В общем и целом паттерн Репозиторий, среди сотен его интерпретаций, лишь одна из реализаций подобного слоя. Да, но пациенты даже одну реализацию осилить не могут. пример, как кто-то из "пациентов не осилил" сможешь привести? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2019, 18:01 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Дмитрий МухhVosttИ не всем он подходит, а при неправильном употреблении превращается больше в проблему, чем в преимущества (repository god object, например). Превращается, когда шаблон "прямые руки" забывают применять :) это рекомендация лида? или просто не удачно сформулировал? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2019, 18:02 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
love_bachдля ТС репозиторий не нужен. а это все "Бизнес-транзакции, саги, оптимистичные блокировки, версионирование..." к репозиторию не имеет отношения не желаете почитать книжки, исходный код проектов, получить опыт? прежде чем заявлять чего там к чему имеет или не имеет отношение, м? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2019, 22:48 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Дмитрий МухДа, но пациенты даже одну реализацию осилить не могут. Ну все хотят какое-то одно единственно верное и прямое решение на все времена. Осиливают какой-то один кривой подход и всё, живой станок по производству ПО готов))) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2019, 22:49 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#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 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#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 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123fkthat, Ты пропускаешь мои аргументы. MS рекумендует иметь по два метода. Асинхронно и синхронно. Одним не обойтись. MS может рекомендовать хоть ссать стоя на коленях. Нам просто синхронные методы нахер не нужны, потому что все равно все контроллеры асинхронные и в итоге все через await вызывается. Рекомендация иметь пару методов это разве что для разработчиков каких-нибудь библиотек - чисто для удобства пользователя - вдруг кому надо будет синхронно вызвать. Хотя для этого достаточно всего лишь дописать к асинхронному вызову ".Result", или ".Wait". Кстати, сам МС этой рекомендации следует уже далеко не всегда - сейчас в коре уже полно апи где все вызовы только асинхронные. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 11:08 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatвсе контроллеры асинхронныето есть get запрос не ждет ответ? Только не отсылай к картинке что надо освободить поток для другого запроса. Я в курсе. ... Вы сдерали репо не быстрым но асинхронным на все все свои проекты. А это чревато. Может потребоваться скорость, а это методы без xxxxAsync и List вместо IEnumerable. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 11:15 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123fkthatвсе контроллеры асинхронныето есть get запрос не ждет ответ? Пилять. Да разберись же ты уже в вопросе, или не спорь. Если ты десктоп пишешь, то тебе это все равно нафиг не упало. Ты про "select/poll" в юниксовых апи слышал когда-нибудь? Ну так вот, в случае операций i/o которых в веб-приложении овердофига async/await дает ту же самую выгоду. Запрос ХТТП в итоге все равно синхронен, потому что иначе быть не может, но при выполнении параллельно дофига запросов потоки используются более рационально, потому что поток, который бы в случае синхронного выполнения сидел бы и тупо ждал завершения ввода-вывода может переключиться на выполнение другого кода. В юниксах это называется "select/poll", в виндах "i/o completion port". ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 11:26 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatЗапрос ХТТП в итоге все равно синхронен,верно. fkthatпоток, который бы в случае синхронного выполнения сидел бы и тупо ждал завершения ввода-вывода Теперь читай вариант решения. Без программиста: авторПри запуске Tomcat создаст пул потоков и экземпляр сервлета. При поступлении запросов методы сервлета будут запускаться на потоках из пула. Сервлет не уничтожается до окончания работы сервера. Потоки можно создавать самостоятельно, но зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 11:31 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthat, То есть поток не сидит и не ждет, как ты описал страшилку. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 11:32 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123fkthat, То есть поток не сидит и не ждет, как ты описал страшилку. Ога. А метод твоего сервлета сел ждать запроса к БД и заблокировал поток. И нахер мне твой томкат и как там сделано, мы про asp.net говорим. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 11:36 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatЕсли ты десктоп пишешь, то тебе это все равно нафиг не упало. Задача повысить оклады сотрудников на 1.5. Покажи важность асинхронности с IEnumerable против синхронности и List /Collection ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 11:36 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatИ нахер мне твой томкат и как там сделано, мы про asp.net говорим.ну, ты к юниксам сделал отсылку)) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 11:37 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatметод твоего сервлета сел ждать запроса к БД и заблокировал потоквремя запроа 0,1сек. Мало? Есть кэширование когда не из базы берет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 11:38 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatНам просто синхронные методы нахер не нужныони быстрее)) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 11:40 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Petro123, Я сливаю. Все, надоело. Ты победил. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 11:45 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatPetro123, Я сливаю. Все, надоело. Ты победил. неееет. Консенсус. Я обязательно и твой асинхронный воткну себе)) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 11:55 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatPetro123пропущено... то есть get запрос не ждет ответ? Пилять. Да разберись же ты уже в вопросе, или не спорь. Не трать ты на него время :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 11:58 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatЯ сливаю. Все, надоело. Ты победил. Молоток :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 11:59 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
stenfordя спросил, дошло-ли до тебя что проблем с множественным перечислением у IEnumerable за которые ты собирался убивать у репозиториев не будет? Или переформулировать этот вопрос в еще более простой форме? Я уже привёл список проблем, связанных с IEnumerable. Зачем вы просите меня повторяться? Если с чем не согласны, напишите. Если непонятно, перечитайте. stenfordво фрейворках много чего появляется, это не означает что надо автоматически не думая хватать новые фичи и пихать их в каждую щель. IEnumerable вполне адекватный интефейс для репозиториев для возврата коллекций, а уж каких-то причин обязательно использовать IReadOnlyCollection вместо него и тем более нет Я не призывал что-то делать автоматически и не думая, да аргументов я до сих пор не вижу кроме того, что вы считаете IEnumerable адекватным интерфейсом. Жаль вы до сих пор не можете пояснить почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 10:05 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatРаботает очень хорошо. Ты, походу, никак не понимаешь, что наружу там не торчит никакого ни LINQ ни EF, ничего подобного. Мы возвращаем только уже готовые объекты или коллекции объектов, выбранные по некоторым нужным нам критериям. Что там при этом внутри все это скрыто. Есть скажем интерфейс: Код: c# 1. 2. 3. 4. 5. 6.
У сиквельного репо реализации Find и Get будут одни, у монговского другие и т.п. А снаружи это без разницы и с т.ч. клиента выглядит одинаково. Я всё равно не вижу, почему не вернуть интерфейс коллекции, если никаких отложенных вычислений нет, и вы возвращаете ни что иное, как коллекции. И по семантике, и по факту. Но вторая проблема здесь заключается в том, что такое у вас Foo? Это агрегат, сущность? Есть ли возможность получить корень агрегата полностью? Или такое поведение у вас инкапсулируется в объекте Query? Что делать с пейджингом? Приведённый вами интерфейс в упор этого не поддерживает, даже при всём желании. fkthatУ сиквельного репо реализации Find и Get будут одни, у монговского другие и т.п. А снаружи это без разницы и с т.ч. клиента выглядит одинаково. Это безусловно хорошо. Таким и должен быть репозиторий. fkthatА в твоем ошибочном представлении репо это что-то такое: Код: c# 1. 2. 3.
И в таком, твоем репо, действителььно никакого смысла нет - что за резон просто тупо возвращать свойство контекста - да его и так можно напрямую брать. А с чего вы решили, что я буду тупо свойство контекста возвращать? И с чего вы решили, что IQueryable не может ходить через EF, Mongo и т.д. и т.п.? Эта та же абстракция, что и ваш Query. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 10:12 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVosttЯ всё равно не вижу, почему не вернуть интерфейс коллекции, если никаких отложенных вычислений нет, и вы возвращаете ни что иное, как коллекции. И по семантике, и по факту. Сразу вопрос. Какой именно коллекции? Мне нравится Array, Васе нравится List, а Вове, так вообще HashSet. Потом, мне например, удобно внутри репо работать с массивом, я вот беру и возвращаю массив. А потом алгоритм поменялся, и стало удобно возвращать List. Что мне делать? Городить костыли внутри репо, или ломать все что снаружи? Это другая сторона инкапсуляции - не тольько спрятать что должно быть спрятано, но и иметь возможность это спрятанное поменять, не затрагивая ничего внешнего. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 10:20 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatудобно внутри репо работать с массивом, я вот беру и возвращаю массивну ты прям пошутил)) Нам много не надо, свободу давай (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 10:38 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatСразу вопрос. Какой именно коллекции? Мне нравится Array, Васе нравится List, а Вове, так вообще HashSet. Это не вопрос вкусов. Возвращать нужно наиболее абстрактный интерфейс, семантически отвечающий задаче, и не вызывающий проблем с производительностью и сопровождением. IReadOnlyCollection появился в библитеке, к сожалению, слишком поздно. К тому времени многие привыкли к IEnumerable, наплевав на семантику, производительность, эффективность и сопровождение. Почему всегда в спорах в инженерной дисциплине часто скатываются к фломастерам? Что за странная тенденция такая, нездоровая. fkthatПотом, мне например, удобно внутри репо работать с массивом, я вот беру и возвращаю массив. А потом алгоритм поменялся, и стало удобно возвращать List. Что мне делать? И массив и список и другие коллекции реализуют интерфейс IReadOnlyCollection. Только он, как интерфейс, гарантирует, что это конечный список, так как имеет свойство количества, и прямо декларирует, что он только для чтения, что означает возможность безопасно закешировать результат. fkthatГородить костыли внутри репо, или ломать все что снаружи? Это другая сторона инкапсуляции - не тольько спрятать что должно быть спрятано, но и иметь возможность это спрятанное поменять, не затрагивая ничего внешнего. Интерфейс коллекции вашим требованиям удовлетворяет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 18:20 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthat, Продолжим. Про пейджинг вы мне не ответили. Как оказалось, отложенные асинхронный вычисления ваши репо не поддерживают. А что делать, если вам нужна проекция? Или огромное число проекций? Или проекции, которые на стадии разработки неизвестны? Будете периодически лазить и допиливать репо? Ох, как же это бьёт в ущерб идеи полной независимости и инкапсуляции. IQueryable отвечает задачам и асинхронного отложенного вычисления, и возможности пейджинга, и возможности бесчисленных эффективных проекций без изменения ни строчки кода репо. На нём можно реализовать OData, например. Или кастомный протокол, выбирающий требуемые данные (конкретные поля), не вытягивая остальное. Возможность тянуть данные по связям, дааа, и фильтровать по ним. Даже фильтровать по агрегациям. Я не к тому, что IQueryable интерфейс это лучший способ работы с данными на все времена. Не всегда он подходит. Я делал проекты на IQueryable, большие и на CQRS и c EventSourcing, и даже было дело на ActiveObject. И могу сказать по опыту, все набросы в сторону IQueryable не стоят и выеденного яйца. Пока что из всех, кто бы реально мог аргументировать что-то против IQueryable я могу выделить skyANA, учитывая его опыт в высоконагруженном проекте. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 18:27 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Вообще, это классика. Когда задача состоит в том, чтобы спроектировать и сделать автомобиль, окрылённый идеей полной инкапсуляции лепит что-то между самолётом, лодкой, автомобилем, трактором и жилым домом. Реальные задачи его не интересуют :) Сам такой был, сам таким отчасти остаюсь... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 18:34 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVostt, Возвращай что хочешь. С такими упоротыми как ты работать только один способ - во всем с ними соглашаться, и наблюдать как они сами себе могилу роют. Тем более если оценить, то, пожалуй, я за свою жизнь процентов 80 денег из заработанных мной в айти заработал за ковыряние в чужом говнокоде, т.ч. чем вас больше, тем мне лучше ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 19:07 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVostt И массив и список и другие коллекции реализуют интерфейс IReadOnlyCollection. Только он, как интерфейс, гарантирует, что это конечный список, так как имеет свойство количества, и прямо декларирует, что он только для чтения, что означает возможность безопасно закешировать результат. Не учи людей плохому. Он декларирует только то. что посредством него, ты ничего не сможешь добавить. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Если полагать, что Count никогда не измениться, можно так выстрелить себе в ногу. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2019, 09:33 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
fkthatВозвращай что хочешь. С такими упоротыми как ты работать только один способ - во всем с ними соглашаться, и наблюдать как они сами себе могилу роют. Тем более если оценить, то, пожалуй, я за свою жизнь процентов 80 денег из заработанных мной в айти заработал за ковыряние в чужом говнокоде, т.ч. чем вас больше, тем мне лучше Я не просил вас соглашаться со мной, я ждал аргументов. Аргументов нет, есть какая-то беспросветная чушь про могилы, деньги и говнокод. Ну и ожидаемый переход на личности. Где упоротость, молодой человек? Я все свои тезисы пояснил и не однократно. Видимо худо вам живётся с такой нежной и обидчивой душевной организацией. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 00:09 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
ЕвгенийВНе учи людей плохому. Он декларирует только то. что посредством него, ты ничего не сможешь добавить. Верно, что и означает read only, ЕвгенийВЕсли полагать, что Count никогда не измениться, можно так выстрелить себе в ногу. Так полагать можно про всё что угодно, и даже про "неизменяемые" строки. Контракт означает, что он ДОЛЖЕН соблюдаться, и что этого МОЖНО ожидать. Но если как ты говоришь, не верить контракту, то далеко ты не продвинешься, по-больше try/catch, фреймворку тоже доверять нельзя. Откуда ты знаешь, что вместо открытого дескриптора файла тебе не вернут просто какое-то рандомное число? Никогда не знаешь. Бред в общем, аргумент странный. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 00:13 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVostt Продолжим. Про пейджинг вы мне не ответили. А чем плох, например метод GetPagedList или Page<T> FindAll(Pageable pageable) ? hVosttА что делать, если вам нужна проекция? Или огромное число проекций? Или проекции, которые на стадии разработки неизвестны? Будете периодически лазить и допиливать репо? Ох, как же это бьёт в ущерб идеи полной независимости и инкапсуляции. . Как вариант, делать слегка более избыточные DTO там, где не критично. А если их огромное количество, то возможно, что статическая типизация, уже начинает больше мешать, чем помогать и нужно смотреть в сторону других контейнеров. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 10:46 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
Hexag0vА чем плох, например метод GetPagedListэто как? По паре методов на каждый список? С пагинацией и без нее? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 11:16 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
hVostt Бред в общем, аргумент странный. Странно то, ReadOnly не фига не такая, а ты предлагаешь использовать ее как ReadOnly. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 17:16 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
ЕвгенийВhVosttБред в общем, аргумент странный. Странно то, ReadOnly не фига не такая, а ты предлагаешь использовать ее как ReadOnly. Всё-таки ты странный. Есть некий класс, что возвращает IReadOnlyCollection. В данном топике обсуждается репозиторий. Вот для потребителя (вызывающей строны) результат будет именно ReadOnly. А то, что ты привёл в качестве примера - сродни: - вот я вам вернул IReadOnlyCollection и потом взял и подменил содержимое, чё не ждали?! С таким же успехом можешь базу дропнуть после того как данные на клиента вернул ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 17:37 |
|
Передача лямбды в репозиторий. Где ошибка?
|
|||
---|---|---|---|
#18+
ЕвгенийВhVosttБред в общем, аргумент странный. Странно то, ReadOnly не фига не такая, а ты предлагаешь использовать ее как ReadOnly. Если покопаешься в исходниках новых библиотек ASP.NET Core, увидишь частое использование IReadOnlyCollection, особенно там, где это семантически верно. Внутри будет либо возврат List, либо AsReadOnly. Разумеется, старые интерфейсы они вынуждены поддерживать, поэтому IEnumerable тоже используется. Ну а так-то в помощью рефлексии ты можешь даже к приватным полям обращаться, полной защиты от дураков нет, и не нужно этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2019, 14:01 |
|
|
start [/forum/moderation_log.php?user_name=Sergio01001]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
126ms |
get tp. blocked users: |
1ms |
others: | 491ms |
total: | 748ms |
0 / 0 |