powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / asp.net репо
11 сообщений из 61, страница 3 из 3
asp.net репо
    #38590698
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320user7320пропущено...

Лучше так сказать: я хочу работать со всеми источниками данных, как с EF. Что мешает мне это сделать? Сложность реализации или что?
Вот вы говорите "представь, что данные приходят не из БД, а из веб-сервиса". А я хочу с этим веб-сервисом работать как с EF - ЛИНКи там всякие, цепочки методов, лямбды. Что для этого надо сделать?Книжки почитать

Хочешь использовать в качестве Criteria выражение как в EF - используй! Какие проблемы? EF по твоему чудесно как-то устроен? Думаешь он каким-то мистическим способом преобразует "ЛИНКи там всякие, цепочки методов, лямбды" в запрос к БД?

Нет! Там тупо код написан. Используй в своей реализации подобный подход. Почитай про IQueryProvider.
...
Рейтинг: 0 / 0
asp.net репо
    #38590705
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320user7320Короче, я хочу работать с репозиторием, как с EF
Лучше так сказать: я хочу работать со всеми источниками данных, как с EF. Что мешает мне это сделать? Сложность реализации или что?
если ты хочешь работать с источниками данных - тебе для начала нужна реализация этого источника.
метод типа IList<Users> GetUsers().
вот и будет реализация твоего источника. где он реализован и как - работа для источника.
и чтобы web сервис загружал объекты со всеми связями - эту работу надо провести внутри источника.
...
Рейтинг: 0 / 0
asp.net репо
    #38591438
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrUuser7320,

нет, ну тут ты разделяй - репозиторий и QueryObject.
когда ты пользуешься репозиторием, использовать QueryObject нет большой необходимости.
фактически (если следовать концепции автора), то он в итоге хорошо подходит для реализации запросов вида
select * from myTable where id=123 или
select * from myTable where id in (1,2,3) [может быть exists] (последнее годиться если производительность запроса не страдает)

если у тебя более сложные запросы - надо смотреть по месту. вполне возможно прийдешь к QueryObject.
например методы типа FindUserByCity() я бы реализовывал в отдельном слое.
вопрос - использовать репозиторий или QueryObject для загрузки данных решал бы исходя из того, укладывается запрос с поиском в конструкцию
типа select * from myTable where id=123.
если да - реализовал бы при помощи репозитория.
если нет - использовал QueryObject.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  public interface IRepository<T>
        where T : class
    {
        IEnumerable<Expression<Func<T, bool>>> WherePredicate { get; set; }
   

        void Insert(T objectToCreate);
        void Delete(Expression<Func<T, Boolean>> where);
        void Delete(T objectToDelete);

        T GetItem(Expression<Func<T, Boolean>> where);

        int Save();

        IEnumerable<T> List();
        PaginatedList<T> List(int? page, int pageSize);

        void OrderBy<TKey>(Expression<Func<T, TKey>> key);

        void Dispose();

    }


вот интерфейс репозитория, который я применил в проекте.
при реализации работать так же удобно, как и в EF.
тут только запросы для отбора данных и CRUD операций.
Эта штука работает с корнями аггрегации? Если надо вставить не только сущность, но и связь этой сущности с другими сощностями (заполнить таблицы связей)?

monstrUuser7320пропущено...

Лучше так сказать: я хочу работать со всеми источниками данных, как с EF. Что мешает мне это сделать? Сложность реализации или что?
если ты хочешь работать с источниками данных - тебе для начала нужна реализация этого источника.
метод типа IList<Users> GetUsers().
вот и будет реализация твоего источника. где он реализован и как - работа для источника.
и чтобы web сервис загружал объекты со всеми связями - эту работу надо провести внутри источника.
Т. е. написать провайдер данных, который бы позволял отправлять веб-сервису всякие ЛИНКи и лямбды, которые этот веб-сервис бы умел "парсить" и превращать в запрос к БД, а потом возвращать обратно готовый результат запроса в виде объекта со всеми связями (корень аггрегации)?

skyANAuser7320пропущено...

Вот вы говорите "представь, что данные приходят не из БД, а из веб-сервиса". А я хочу с этим веб-сервисом работать как с EF - ЛИНКи там всякие, цепочки методов, лямбды. Что для этого надо сделать?Книжки почитать

Хочешь использовать в качестве Criteria выражение как в EF - используй! Какие проблемы? EF по твоему чудесно как-то устроен? Думаешь он каким-то мистическим способом преобразует "ЛИНКи там всякие, цепочки методов, лямбды" в запрос к БД?

Нет! Там тупо код написан. Используй в своей реализации подобный подход. Почитай про IQueryProvider.
Вот-вот, "там кода написан". Причём кода там написано может даже поболее, чем в "репозитории с двумя сотнями методов". Нужно свои провайдеры писать. А в EF для меня дяди написали и бесплатно дали использовать - красота!

А у вас, кстати, кретирий тоже из себя представляет некий Expression, как у Монстрю ? По идее, если писать в веб-сервисе не FindUserById(int userId), а FindUser(Expression predicate), то можно всякие ЛИНКи и лямбды прямо в параметр метода сервиса отправлять.

Вот тут - чего внутри IPersonCriteria сидит? Методы, принимающие Expression?
...
Рейтинг: 0 / 0
asp.net репо
    #38592669
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

что то у тебя мысли разбегаются и что-то конкретного посоветовать трудно.
конкретно сейчас ты какую задачу решаешь?
...
Рейтинг: 0 / 0
asp.net репо
    #38592686
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrUuser7320,

что то у тебя мысли разбегаются и что-то конкретного посоветовать трудно.
конкретно сейчас ты какую задачу решаешь?
Ну, сейчас я не решаю задачу с репозиторием. Я решил, что пока мне не нужно с нескольких источников получать, а только с БД - использую тупо EF. Ну а в будущем надо что-то выбрать будет. Вот и узнаЮ здесь. Потому что репозиторий - он не один. У каждого свой вид на него.

Вот, в частности, хочу узнать у Скайаны, что скрывается под IPersonCriteria здесь . Потому что у вас подход с Expression, а у Скайаны - свой какой-то.
...
Рейтинг: 0 / 0
asp.net репо
    #38592695
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

мне кажется он применил паттерн Спецификация.
ну тот набор Expressions лямбда выражений тоже наверно можно считать примитивной реализации паттерна Спецификация - просто в случае Expressions условие отбора указывается при помощи реализации лямбда выражения, а у него условие отбора указывается при помощи реализации интерфейса
...
Рейтинг: 0 / 0
asp.net репо
    #38592698
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrUuser7320,

мне кажется он применил паттерн Спецификация.
ну тот набор Expressions лямбда выражений тоже наверно можно считать примитивной реализации паттерна Спецификация - просто в случае Expressions условие отбора указывается при помощи реализации лямбда выражения, а у него условие отбора указывается при помощи реализации интерфейса
Ваш подход ещё тем отличается, что Expression можно сформировать в одном месте и передать как объект в другое место (с клиента на сервер, например). А можно ли так сделать с конкретной реализацией интерфейса?
...
Рейтинг: 0 / 0
asp.net репо
    #38592712
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

ну в чем проблема - ты указывай во входном параметре функции переменную типа интерфейс, а в конкретном вызове функции указывай уже нужную тебе реализацию интерфейса - будет понижение связности между компонентами системы.
какую конкретно реализацию нужно передать - решать до вызова функции.
интерфейсы в принципе для таких вещей и нужны
...
Рейтинг: 0 / 0
asp.net репо
    #38593077
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320
Ваш подход ещё тем отличается, что Expression можно сформировать в одном месте и передать как объект в другое место (с клиента на сервер, например). А можно ли так сделать с конкретной реализацией интерфейса?

...а зачем выражение EF/Linq формировать на клиенте? .. Клиент - это же пульт с кнопками и переключателями ... Набор состояний контролов можно передать или в коллекции, или как oData делает, да хоть собственный параметр склеить строчный, а метод потом пусть разберет и распихивает по методам уже в веб-сервисе, вызывая IQueryable, IEnumerable, Expression AsDTO ...
...
Рейтинг: 0 / 0
asp.net репо
    #38593430
Gena_16032014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Развели тут :) В чем отличие фабики для квериобжектов и репозитоьрия?
Фабрика по сути и есть год объект
...
Рейтинг: 0 / 0
asp.net репо
    #38593555
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gena_16032014Развели тут :) В чем отличие фабики для квериобжектов и репозитоьрия?
Фабрика по сути и есть год объект

есть разница. репо выдаёт один и тот же тип объекта, но с разными данными. фабрика выдаёт разные объекты с одним интерфейсом.

репозиторий: человек1: вася, человек2: петя, человек3: иван

фабрика: руки-ноги1: человек, руки-ноги2: франкенштейн, руки-ноги3: халк
...
Рейтинг: 0 / 0
11 сообщений из 61, страница 3 из 3
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / asp.net репо
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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