powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / asp.net репо
25 сообщений из 61, страница 1 из 3
asp.net репо
    #38587467
Gena_16032014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для работы с каждой сущностью EF создаем репозиторий.
А как правильно поступить если нужно делать выборку сразу из двух сущностей?
...
Рейтинг: 0 / 0
asp.net репо
    #38587517
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gena_16032014для работы с каждой сущностью EF создаем репозиторий.
А как правильно поступить если нужно делать выборку сразу из двух сущностей?

А может все-таки это одна сущность, которая состоит из двух таблиц? )
...
Рейтинг: 0 / 0
asp.net репо
    #38587544
Gena_16032014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПарамонGena_16032014для работы с каждой сущностью EF создаем репозиторий.
А как правильно поступить если нужно делать выборку сразу из двух сущностей?

А может все-таки это одна сущность, которая состоит из двух таблиц? )

суть вопроса не в том одна или две сущности, а как правильно код написать в этой ситуации. Есть репо для работы с одной таблицей есть репо для работы с другой таблицей...
Делать репо для joina или какие-то еще варианты?
...
Рейтинг: 0 / 0
asp.net репо
    #38587547
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gena_16032014 Есть репо для работы с одной таблицей есть репо для работы с другой таблицей...
Делать репо для joina или какие-то еще варианты?

Да. Делать репо для работы с сущностью, а не с таблицей. )
...
Рейтинг: 0 / 0
asp.net репо
    #38587777
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gena_16032014Парамонпропущено...


А может все-таки это одна сущность, которая состоит из двух таблиц? )

суть вопроса не в том одна или две сущности, а как правильно код написать в этой ситуации. Есть репо для работы с одной таблицей есть репо для работы с другой таблицей...
Делать репо для joina или какие-то еще варианты?
Есть мнение, что, если данные в проект будут приходить только из БД, то никаких репозиториев делать не нужно, а можно обойтись голым ORM (EF, NHibernate и т. д.). Т. е. не усложнять там, где это не нужно, т. к. с репозиторием много проблем, и просто так они не решаются.

ПарамонGena_16032014 Есть репо для работы с одной таблицей есть репо для работы с другой таблицей...
Делать репо для joina или какие-то еще варианты?

Да. Делать репо для работы с сущностью, а не с таблицей. )
Хмм... Это как-то связано с понятием "корень аггрегации"? Если да, то автору темы лучше гуглить по "EF repository agregation root".
...
Рейтинг: 0 / 0
asp.net репо
    #38587828
Gena_16032014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
user7320Gena_16032014пропущено...


суть вопроса не в том одна или две сущности, а как правильно код написать в этой ситуации. Есть репо для работы с одной таблицей есть репо для работы с другой таблицей...
Делать репо для joina или какие-то еще варианты?
Есть мнение, что, если данные в проект будут приходить только из БД, то никаких репозиториев делать не нужно, а можно обойтись голым ORM (EF, NHibernate и т. д.). Т. е. не усложнять там, где это не нужно, т. к. с репозиторием много проблем, и просто так они не решаются.

Парамонпропущено...


Да. Делать репо для работы с сущностью, а не с таблицей. )
Хмм... Это как-то связано с понятием "корень аггрегации"? Если да, то автору темы лучше гуглить по "EF repository agregation root".

А какие проблемы с репой. на конкретных примерах
...
Рейтинг: 0 / 0
asp.net репо
    #38587840
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gena_16032014,

правильнее тут может оказаться делать не репозиторий а объект-запрос .
репозитории мало подходят, если возникает необходимость соединяться с другими таблицами
...
Рейтинг: 0 / 0
asp.net репо
    #38587875
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gena_16032014А какие проблемы с репой. на конкретных примерах
Вот тут Монстрю ссылку дал. Если коротко, то проблема в разрастании репозитория(ев). Эта проблема вообще известна как класс проблем, возникающих во многих областях программирования. Название этого класса я не знаю. Но та же проблема возникает при, например, построении служб, когда нужно представить некий АПИ с запросами. Начинают клепать службы вида AddXXX, FindXXXById и т. п. Некоторые объединения в классы помогают, но всё равно возникают проблемы при сложных запросах со связями.

И насколько я понимаю, даже решения, предложенные по ссылки Монстрю, всё равно не обладают такой гибкостью и функциональностью, как хотя бы в EF вкупе с расшерениями LINQ.
...
Рейтинг: 0 / 0
asp.net репо
    #38587955
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Хмм... Это как-то связано с понятием "корень аггрегации"
Да.

А вообще это уже не раз обсуждалось.
...
Рейтинг: 0 / 0
asp.net репо
    #38587967
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrUвозникает необходимость соединяться с другими таблицами
Это да, в реляционной базе такая необходимость иногда бывает )
...
Рейтинг: 0 / 0
asp.net репо
    #38587983
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Gena_16032014А какие проблемы с репой. на конкретных примерах
Вот тут Монстрю ссылку дал. Если коротко, то проблема в разрастании репозитория(ев). Эта проблема вообще известна как класс проблем, возникающих во многих областях программирования. Название этого класса я не знаю. Но та же проблема возникает при, например, построении служб, когда нужно представить некий АПИ с запросами. Начинают клепать службы вида AddXXX, FindXXXById и т. п. Некоторые объединения в классы помогают, но всё равно возникают проблемы при сложных запросах со связями.

И насколько я понимаю, даже решения, предложенные по ссылки Монстрю, всё равно не обладают такой гибкостью и функциональностью, как хотя бы в EF вкупе с расшерениями LINQ.

да вот кстати я все больше присматриваюсь в подходу, когда для извлечения данных лучше использовать специальный объект-запрос.
его можно протестировать, выделить в отдельную библиотеку.
кстати можно какую угодно гибкость обеспечить, используя Linq\EF.
недавно в проекте было необходимо реализовать выборку из сущности Сообщения + 22 возможных параметра фильтрации.
сначала начал пользоваться репозиторием, но потом при добавлении 23 параметра понадобилось использовать Join с другими таблицами - пришлось перейти на использование контекста.
в итоге пришел к объекту запросу.
...
Рейтинг: 0 / 0
asp.net репо
    #38588419
Gena_16032014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
monstrUGena_16032014,

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

Ну допустим делаем один объект на запрос. В статье говориться, что лучше использовать фабрику... Так фабрика и получается год объектом.
...
Рейтинг: 0 / 0
asp.net репо
    #38588610
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gena_16032014Парамонпропущено...


А может все-таки это одна сущность, которая состоит из двух таблиц? )

суть вопроса не в том одна или две сущности, а как правильно код написать в этой ситуации. Есть репо для работы с одной таблицей есть репо для работы с другой таблицей...
Делать репо для joina или какие-то еще варианты?А теперь представьте что данные Вы захотели получать не напрямую из базы, а через API сервис.
Вы вытащите первым запросом к сервису данные из одной таблицы, и для каждой строки (объекта) будете делать отдельный запрос, чтобы выполнить JOIN?

Вам нужно определится с корнем агрегации, либо репозиторий тут не нужен.
...
Рейтинг: 0 / 0
asp.net репо
    #38588613
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведите конкретный пример и лучше с кодом.
...
Рейтинг: 0 / 0
asp.net репо
    #38588671
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамонuser7320Хмм... Это как-то связано с понятием "корень аггрегации"
Да.

А вообще это уже не раз обсуждалось.
У меня по этому корню ряд вопросов. Не обязательно к вам, а вообще к участникам дискуссии.

1. А всегда ли можно выделить корень аггрегации? Если нет, то что делать?

2. Два разных корня аггрегации могут пересекаться (т. е. иметь одинаковые сущности в составе)? Если да, то это нормально или это проблема и её надо как-то решать?

3. Может же быть, что количество корней аггрегации будет большим? Может, даже больше количества самих сущностей. Тогда снова упираемся в разрастание репозитория, наполненного кучей функций по работе с корнями аггрегации. Что делать?
...
Рейтинг: 0 / 0
asp.net репо
    #38588806
Gena_16032014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAПриведите конкретный пример и лучше с кодом.
кода можно сказать нет.. я пока только думаю как лучше. Конкретный пример. Ну например есть интернет магазин . Таблица с предложениями. И с рубриками. Нужно выводить предложения на страницу с информацией по рубрикам. И в то же время нужно выводить рубрики отдельно. Ну выходит два репозитория в одном джоин 2х сущностей. В другом просто выборка из 1 одной сущности...
...
Рейтинг: 0 / 0
asp.net репо
    #38588812
Gena_16032014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а по фабрике кто ответит?
...
Рейтинг: 0 / 0
asp.net репо
    #38588882
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот паттернов-то налепили.

Репозитории, фабрики, корни агрегации -- выкинуть и забыть.
...
Рейтинг: 0 / 0
asp.net репо
    #38588967
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gena_16032014skyANAПриведите конкретный пример и лучше с кодом.
кода можно сказать нет.. я пока только думаю как лучше. Конкретный пример. Ну например есть интернет магазин . Таблица с предложениями. И с рубриками. Нужно выводить предложения на страницу с информацией по рубрикам. И в то же время нужно выводить рубрики отдельно. Ну выходит два репозитория в одном джоин 2х сущностей. В другом просто выборка из 1 одной сущности...
Если работа будет только с БД, достаточно одного EF (ну или какая ORM там лучше подойдёт для вашей БД).

skyANAА теперь представьте что данные Вы захотели получать не напрямую из базы, а через API сервис.
А действительно ли всё так плохо и всегда надо программировать с учётом "а вот если через 5 лет понадобится добавить работу с АПИ-сервисом, с тем, с другим, с десятым..."? Задача пока стоит из БД? Ограничиваемся одним EF. Как добавят работу с сервисом - новое ТЗ и дописываем до работы с сервисом. Кой смысл сразу лепить супер-универсальное решение, которого, кстати, не бывает?

Ну и, по-моему, работа с БД и с сервисом требует разного подхода. Не факт, что АПИ-сервис такой же функциональный, как EF. Скорее, он и третьей доли EF-функциональности не имеет. Значит, чтобы не ограничиваться самым малофункциональным элементом, надо будет написать отдельный репозиторий для работы с сервисом, и отдельный - для работы с БД через EF. Так?
...
Рейтинг: 0 / 0
asp.net репо
    #38589061
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gena_16032014skyANAПриведите конкретный пример и лучше с кодом.
кода можно сказать нет.. я пока только думаю как лучше. Конкретный пример. Ну например есть интернет магазин . Таблица с предложениями. И с рубриками. Нужно выводить предложения на страницу с информацией по рубрикам. И в то же время нужно выводить рубрики отдельно. Ну выходит два репозитория в одном джоин 2х сущностей. В другом просто выборка из 1 одной сущности...
Да вот как раз может и не очень нужен корень агрегации и репозитории.
для сложных выборок вполне достаточен подход объект-запрос. в нем ты формируешь все нужные запросы и голова не болит о том, какой корень агрегации использовать.
если объектов запросов будет много - будет смысл подумать о фабрике запросов.
а сейчас у тебя и одного объекта нет - о фабрике думать нет причин.
...
Рейтинг: 0 / 0
asp.net репо
    #38589126
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320

Ну и, по-моему, работа с БД и с сервисом требует разного подхода. Не факт, что АПИ-сервис такой же функциональный, как EF. Скорее, он и третьей доли EF-функциональности не имеет. Значит, чтобы не ограничиваться самым малофункциональным элементом, надо будет написать отдельный репозиторий для работы с сервисом, и отдельный - для работы с БД через EF. Так?

... вообще-то, если говорить об АПИ-сервисе в варианте WebAPI, то никто не мешает использовать EF в самом сервисе, выдавая на гора уже готовую коллекцию клиенту после всех джойнов, замещений null-ов и прочего причесывания ...
...
Рейтинг: 0 / 0
asp.net репо
    #38589276
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320А действительно ли всё так плохо и всегда надо программировать с учётом "а вот если через 5 лет понадобится добавить работу с АПИ-сервисом, с тем, с другим, с десятым..."? Задача пока стоит из БД? Ограничиваемся одним EF. Как добавят работу с сервисом - новое ТЗ и дописываем до работы с сервисом. Кой смысл сразу лепить супер-универсальное решение, которого, кстати, не бывает?Это зависит от предметной области, данных и характера работы с ними.
Также известно какие решения существуют на рынке, на западе, какие планы у бизнеса. Ну и общие тренды видны.

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

user7320Ну и, по-моему, работа с БД и с сервисом требует разного подхода. Не факт, что АПИ-сервис такой же функциональный, как EF. Скорее, он и третьей доли EF-функциональности не имеет. Значит, чтобы не ограничиваться самым малофункциональным элементом, надо будет написать отдельный репозиторий для работы с сервисом, и отдельный - для работы с БД через EF. Так?Не так. Сферические рассуждения неопытного человека.
...
Рейтинг: 0 / 0
asp.net репо
    #38589344
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И представить, что данные берутся не из БД, а из другого места я предлагаю для того, чтобы легче было понять какие репозитории нужны, если они вообще нужны.

Потому как репозиторий должен иметь интерфейс, что одинаково просто реализуется для разных вариантов распределения и хранения данных, тем самым обеспечивая persistence ignorance
...
Рейтинг: 0 / 0
asp.net репо
    #38589488
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПотому как репозиторий должен иметь интерфейс, что одинаково просто реализуется для разных вариантов распределения и хранения данных, тем самым обеспечивая persistence ignorance
А в интерфейсе как учесть всё разнообразие запросов, включая джойны и пр.? Через объект-запрос? Через составление сложных запросов из простых репозиторных?
...
Рейтинг: 0 / 0
asp.net репо
    #38589514
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, как как.
Репозиторий должен возвращать доменные объекты, которые и агрегируют в себе результаты запросов к БД, или к другому хранилищу.

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


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