powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / IRepository как пользоваться
25 сообщений из 238, страница 3 из 10
IRepository как пользоваться
    #38414538
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
А Вы как обязываете своих разработчиков добавлять такие вот абстракции в проект?Так же как и в остальных случаях. Это могла быть и недостающая вьюха в БД, и всё что угодно, в зависимости от имеющейся архитектуры.То есть никак не обязываете?
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414540
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttТолько возвращать можно не IEnumerable<T>, а IQueryable<T> — и я не вижу к каким проблемам это может привести.
Тебе уже 10 раз озвучили эти проблемы. Яд на столе.

hVosttЗато явный профит вижу. Можно сделать Take и Skip, можно сделать OfType, можно сделать выборку только нужных полей (например, если не хочется для отдельных случаев вытаскивать большой блоб) или дополнительно уточнить запрос динамически ( в тех случаях, когда спецификации уже не подходят, например OData, или кастомный фильтр/сортировщик на гриде ).
Это всё делается в реализации метода репозитория. Репозиторий возвращает только то, что нужно потребителю.

hVosttЯ считаю, что IQueryable<T> — разработан совсем не для того, чтобы его похоронили где-то на задворках репозитория.
Никто его хоронить не будет, просто нужно это использовать в правильных местах.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414543
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНеправильный ответ. Ты отдаешь IQueryable, чтобы его потом можно было еще дофильтровывать. Так вот о этой дофильтровке и идет речь. В 10 местах ты использовал дофильтровку, потом появился новый признак в БД, который должен учитываться во всех дофильтровках и мы получили в бубен.

спецификация. упаковываются такие случае в спецификацию. IQueryable<T> не для дофильтрации. а, например, для построения справочника. пейджинга. уточнения типа (в случае inheritance mapping). сортировки. зачем какой-то ещё огород городить? удобный интерфейс. надо пользоваться.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414549
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУТебе уже 10 раз озвучили эти проблемы. Яд на столе.

плохо озвучили. на счет яда понял. отмазка на случаи "я не знаю, или лесом"
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414553
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КЯ говорю про случаи, когда в сервис надо выложить именно "всё". В веб-проектах, вероятно, такое не требуется. Но у меня WPF, тут такое требуется часто.
Ну хорошо, выложилось всё. Но причем тут логика (модель, code behind валидация) и презентационный слой (UI, валидация)?Там трёхзвенка. Я хочу увидеть в вебсервисе объект, соответствующий таблице в БД.

МСУАлексей КМаксимум что там можно сделать, это подставить выражение в один из расширяющих методов класса Queryable (Where, Select и т. п.). Мне этого недостаточно.
Почему же, ты точно так же можешь конструировать весь отложенный запрос или несколько.Не точно так же. Гибкости подставляемых выражений там не добиться.

МСУАлексей КИ как мы будем подставлять IL, живущий в Func<>, в LINQ Expression?
Какой IL? Я про Func<A, B> predicate, который можно передавать в аргументы.Func<A, B> vs Expression<Func<A, B>>

Есть разница? :-)

МСУАлексей КПотому что при использовании подставляемых выражений с повторным использованием всё в порядке.
Какие в результирущем IQueryable "подставляемые выражения"? IQueryable не может быть результирующим, результирующим может быть List<T>. IQueryable - это фрагмент запроса, как вьюха в БД, которая сама по себе не имеет плана выполнения, план выполнения имеет запрос к вьюхе.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414554
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttIQueryable<T> не для дофильтрации
Ты сам себе противоречишь. Вот тут ты сказал:

hVosttЗато явный профит вижу. Можно сделать Take и Skip

Это таки дофильтрация. Или будешь спорить?

hVosttа, например, для построения справочника. пейджинга. уточнения типа (в случае inheritance mapping). сортировки. зачем какой-то ещё огород городить? удобный интерфейс. надо пользоваться.
Всё это сделает репозиторий, ты только ему передай ему параметры.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414558
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЯ считаю, что IQueryable<T>...Считай на здоровье. Статья призвана обратить внимание на возможные проблемы их применения.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414564
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТам трёхзвенка. Я хочу увидеть в вебсервисе объект, соответствующий таблице в БД.
То есть у тебя все запросы вида "SELECT * FROM"?


Алексей КНе точно так же. Гибкости подставляемых выражений там не добиться.
В чем выражена эта гибкость? )

Алексей КFunc<A, B> vs Expression<Func<A, B>>
Есть разница? :-)
Не придирайся. Разумеется имелось ввиду Expression + Func, а не голый Func в качестве аргумента :)

Алексей КIQueryable не может быть результирующим, результирующим может быть List<T>. IQueryable - это фрагмент запроса, как вьюха в БД, которая сама по себе не имеет плана выполнения, план выполнения имеет запрос к вьюхе.
Не нужен никому фрагмент запроса, потребителю нужен готовый к съедению набор.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414565
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей Кпропущено...
Это проблема не IQueryable как такового, а проблема автора, который не добавил в проект необходимой абстракции.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
IQueryable<D> D
{
    get
    {
        return 
             from c in db.C
             select new D
             {
                  Base = c,
                  IsActive = c.IsDeleted == false
             };
    }
}



Неправильный ответ. Ты отдаешь IQueryable, чтобы его потом можно было еще дофильтровывать. Так вот о этой дофильтровке и идет речь. В 10 местах ты использовал дофильтровку, потом появился новый признак в БД, который должен учитываться во всех дофильтровках и мы получили в бубен.Я отдаю IQueryable, чтобы на его базе можно было построить множество запросов. Если фильтр, о котором ты говоришь, нужно сделать в одном месте - он будет сделан в одном месте.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414572
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЯ отдаю IQueryable, чтобы на его базе можно было построить множество запросов. Если фильтр, о котором ты говоришь, нужно сделать в одном месте - он будет сделан в одном месте.
Нельзя этого делать, тебе ж объяснили почему. Если потребуется усечь выборку (новое требование) при помощи [Where IsDeleted = False], тебе придется это делать в 100500 местах прикладного кода.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414577
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КТам трёхзвенка. Я хочу увидеть в вебсервисе объект, соответствующий таблице в БД.
То есть у тебя все запросы вида "SELECT * FROM"?
В форму редактирования уходит объект, сгенерированный по таблице из базы. Это select * from ?

МСУАлексей КНе точно так же. Гибкости подставляемых выражений там не добиться.
В чем выражена эта гибкость? )Тут в двух словах не расскажешь, бери пробуй. Я попробовал - мне понравилось. :-)

МСУАлексей КFunc<A, B> vs Expression<Func<A, B>>
Есть разница? :-)
Не придирайся. Разумеется имелось ввиду Expression + Func, а не голый Func в качестве аргумента :)У меня телепатор в ремонте.

МСУАлексей КIQueryable не может быть результирующим, результирующим может быть List<T>. IQueryable - это фрагмент запроса, как вьюха в БД, которая сама по себе не имеет плана выполнения, план выполнения имеет запрос к вьюхе.
Не нужен никому фрагмент запроса, потребителю нужен готовый к съедению набор.Потребители разные бывают.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414578
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О чем спор? Что возвращать IEnumerable или IQueryable из репозитория? Конечно первое.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414583
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КЯ отдаю IQueryable, чтобы на его базе можно было построить множество запросов. Если фильтр, о котором ты говоришь, нужно сделать в одном месте - он будет сделан в одном месте.
Нельзя этого делать, тебе ж объяснили почему. Если потребуется усечь выборку (новое требование) при помощи [Where IsDeleted = False], тебе придется это делать в 100500 местах прикладного кода.Ах вот ты о чём. :-)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
IQueryable<D> D1
{
    get
    {
        return 
             from c in db.C
             select new D
             {
                  Base = c,
                  IsActive = c.IsDeleted == false
             };
    }
}

IQueryable<D> D2
{
    get
    {
        return 
             from d in D
             where d.IsActive
             select d;
    }
}

Обрати внимание, IsActive описано в одном месте.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414585
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
from d in D1

опечатка
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414589
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И кстати люди постоянно забывают, что репозиторий призван скрыть от нас то, как распредены данные.
Сегодня вы используете SQL Server, EF и OData, всё глатко и пушисто.
А завтра часть данных берётся из NoSQL хранилища, кэшируется в Couchbase... И приехали.
Пишите, Шура, пишите новые IQueryProvider-ы, а то что-то ни фига не работает.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414594
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУА через выражения это выглядит ещё красивее

Код: c#
1.
2.
3.
4.
5.
6.
static readonly Expression<Func<C, bool>> IsActive = c => c.IsDeleted == false;

var r =  
    from c in db.C
    where IsActive.Invoke(c)
    select c;
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414596
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAИ кстати люди постоянно забывают, что репозиторий призван скрыть от нас то, как распредены данные.
Сегодня вы используете SQL Server, EF и OData, всё глатко и пушисто.
А завтра часть данных берётся из NoSQL хранилища, кэшируется в Couchbase... И приехали.
Пишите, Шура, пишите новые IQueryProvider-ы, а то что-то ни фига не работает.

это единственный разумный аргумент. но с другой стороны, для более менее популярных хранилищ LINQ провайдеры активно пишутся. это как стандарт де-факто. практически тоже самое можно прикатать даже к SQL
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414598
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAИ кстати люди постоянно забывают, что репозиторий призван скрыть от нас то, как распредены данные.Если мы готовы к "N+1", можно и скрыть. Всё зависит от задачи.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414600
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAИ кстати люди постоянно забывают, что репозиторий призван скрыть от нас то, как распредены данные.
Сегодня вы используете SQL Server, EF и OData, всё глатко и пушисто.
А завтра часть данных берётся из NoSQL хранилища, кэшируется в Couchbase... И приехали.
Пишите, Шура, пишите новые IQueryProvider-ы, а то что-то ни фига не работает.

это единственный разумный аргумент. но с другой стороны, для более менее популярных хранилищ LINQ провайдеры активно пишутся. это как стандарт де-факто. практически тоже самое можно прикатать даже к SQL ++
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414604
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAИ кстати люди постоянно забывают, что репозиторий призван скрыть от нас то, как распредены данные.Если мы готовы к "N+1", можно и скрыть. Всё зависит от задачи.

они просто говорят о репозитории, который является и в то же время моделью. модель (в понимании MVC), даже близко не является репозиторием, она его использует. это видимо и есть N+1 в вашем понимании.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414607
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей Кпропущено...
Если мы готовы к "N+1", можно и скрыть. Всё зависит от задачи.

они просто говорят о репозитории, который является и в то же время моделью. модель (в понимании MVC), даже близко не является репозиторием, она его использует. это видимо и есть N+1 в вашем понимании.Я о том, что такой подход приведёт к необходимости множества методов типа GetMyEntityByID(int id) , что в свою очередь приведёт к N+1. IQueryable избавляет от этой напасти.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414609
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAИ кстати люди постоянно забывают, что репозиторий призван скрыть от нас то, как распредены данные.
Сегодня вы используете SQL Server, EF и OData, всё глатко и пушисто.
А завтра часть данных берётся из NoSQL хранилища, кэшируется в Couchbase... И приехали.
Пишите, Шура, пишите новые IQueryProvider-ы, а то что-то ни фига не работает.

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

P.S.: плюс данные могут браться и не из нашего хранилища, а запрашиваться со сторонних сервисов (наших партнёров, публичных и т.п.).
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414613
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVosttпропущено...


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

P.S.: плюс данные могут браться и не из нашего хранилища, а запрашиваться со сторонних сервисов (наших партнёров, публичных и т.п.).Речь идёт о реализации логики к одной SQL базе. Понятно, что если баз много или они не-SQL, IQueryable тут вряд ли пригодится.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414615
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей Кпропущено...
Если мы готовы к "N+1", можно и скрыть. Всё зависит от задачи.

они просто говорят о репозитории, который является и в то же время моделью. модель (в понимании MVC), даже близко не является репозиторием, она его использует. это видимо и есть N+1 в вашем понимании.Репозиторий, что является и в то же время моделью. Жжёшь.
...
Рейтинг: 0 / 0
IRepository как пользоваться
    #38414620
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВ форму редактирования уходит объект, сгенерированный по таблице из базы. Это select * from ?
Почему он должен быть "select * from"? А если там еще 10 блоб полей, а если там еще секурность, а если там еще логика - давать поле или не давать. За это отвечает репозиторий, который умеет работать с ISecurityService (через IoC).

Алексей КМСУпропущено...
В чем выражена эта гибкость? )Тут в двух словах не расскажешь, бери пробуй. Я попробовал - мне понравилось. :-)
Ну давать в трёх словах, мы не торопимся :)

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


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