Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
user7320skyANAПотому как репозиторий должен иметь интерфейс, что одинаково просто реализуется для разных вариантов распределения и хранения данных, тем самым обеспечивая persistence ignorance А в интерфейсе как учесть всё разнообразие запросов, включая джойны и пр.? Через объект-запрос? Через составление сложных запросов из простых репозиторных? репозиторий как паттерн задумывался как абстракция, которая скроет всю работу с БД для операций выборки, добавления, обновления для сущностей. на практике оказывается, что операций извлечений данных уйма, и не всегда понятно репозиторий к какой именно сущности делать. недавно сдали сложный проект. наружу была web application. но нас предупредили, что все методы, отдающие данные, должны быть доступны через web сервисы. с ребятами подумали, что выгодно нам будет иметь слой доступа к данным Facade. в нем реализовываем все методы, получающие данные. и наше основное приложение данные получает из этого слоя. для web сервисов завели другое приложение - все данные загружаем из слоя Facade. благодаря этому загрузку данных мы реализовываем только в одном месте. теперь о том как реализовываем. для выборки простых значений в конечном итоге надо сформировать выражение типа select * from myTable where id=12. то есть разумно репозиторий реализовывать так, чтобы в нем можно было накапливать условия where. для многих случаев будет достаточно. накопление where выражений в репозитории также реализовать можно. но не для всех. когда у вас много соединений с таблицами - набором нескольких where выкрутиться не получиться. когда вы не знаете, какой корень агрегации выбрать. то есть когда нужен вам список пользователей с ролью SuperUser - репозиторий чего вам нужно делать? пользователей или ролей? мне пришлось репозиторий бросить и строить запрос напрямую. но более практичным был бы подход делать объект-запрос. его покрыть тестами можно. сейчас написал - выработалось правило :) если вы можете однозначно сформулировать корень агрегации - пользуйтесь репозиторием. если нет - пользуйтесь объектом-запросом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2014, 14:56 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
чем плох репозиторий человек отлично написал тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2014, 14:57 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
Gena_16032014skyANAПриведите конкретный пример и лучше с кодом. кода можно сказать нет.. я пока только думаю как лучше. Конкретный пример. Ну например есть интернет магазин . Таблица с предложениями. И с рубриками. Нужно выводить предложения на страницу с информацией по рубрикам. И в то же время нужно выводить рубрики отдельно. Ну выходит два репозитория в одном джоин 2х сущностей. В другом просто выборка из 1 одной сущности...Правильно-ли я понял, что рубрика - это раздел классификатора товаров. И выводить нужно краткую информацию о том, к какой категории относится товар? Тогда тут два репозитория, т.к. два корня агрегации: репозиторий предложений и репозиторий для работы с классификатором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2014, 14:59 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
monstrUесли вы можете однозначно сформулировать корень агрегации - пользуйтесь репозиторием. если нет - пользуйтесь объектом-запросомФишка в том, что репозиторий в качестве параметра может принимать некий IQuery, ICondition, ISpecification, так что не обязательно или тем пользоваться, или этим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2014, 15:03 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
monstrUчем плох репозиторий человек отлично написал тут Там же кстати есть ссылка на то, где написано, что можно использовать шаблон Specification вместе c шаблоном Query Object в рамках репозитория ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2014, 15:06 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
skyANA, можно столько всего сделать, что закачаешься. люди же просят посоветовать с чего начать, как поступить. ребята делайте для начала как можно проще - жизнь заставит и до фабрик дойдете , и до контейнеров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2014, 23:17 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
monstrUskyANA, можно столько всего сделать, что закачаешься. люди же просят посоветовать с чего начать, как поступить. ребята делайте для начала как можно проще - жизнь заставит и до фабрик дойдете , и до контейнеровСогласен, если не видно зачем репозиторий, то и не нужен он. Я про это и писал. Но если таки нужен, то я вижу два корня агрегации и соответсвенно два репозитория. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 00:40 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
monstrUskyANA, можно столько всего сделать, что закачаешься. люди же просят посоветовать с чего начать, как поступить. ребята делайте для начала как можно проще - жизнь заставит и до фабрик дойдете , и до контейнеров Люди просят нечто универсальное. Репозиторий в чистом своём виде - универсальное. Только в чистом виде он подходит только для очень простых случаев. Для сложных случаев начинаются подгонки и мутации репозитория для каждого типа случаев. В результате универсальность остаётся утопией. Новичок приходит на форум с вопросом, а "зубры программирования" ему не могут дать нормальный ответ. Через несколько дней мытарств новичок начинает догадываться, что зубры и сами не знают общего метода и для каждой задачи будут изобретать свой подход. Общие методы хороши только для примеров в учебниках, а на практике в чистом виде почти не применяются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 07:02 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
monstrUuser7320пропущено... А в интерфейсе как учесть всё разнообразие запросов, включая джойны и пр.? Через объект-запрос? Через составление сложных запросов из простых репозиторных? репозиторий как паттерн задумывался как абстракция, которая скроет всю работу с БД для операций выборки, добавления, обновления для сущностей. на практике оказывается, что операций извлечений данных уйма, и не всегда понятно репозиторий к какой именно сущности делать. Мне вот это кажется странным. Репозиторий как паттерн придумали явно не в 2000-х, а раньше. И, судя по тому, что проблемы с ним начинаются почти сразу же после начала использования (начал делать и тут же получил сотни методов типа FindById), почему о его проблемах стали говорить только недавно? Почему все эти QueryObject стали активно обсуждать только лет 5 назад? А до этого что, годами довольствовались километровыми списками методов репозиториев? Или каждый "зубр" писал свой велосипед, проклиная тех, кто придумывает "неработающие паттерны"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 07:08 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
user7320, ну вот что ты несешь? Я же сказал: два корня агрегации, два репозитория. По поводу IQueryObject: я первый раз использовал этот шаблон еще при .Net 2.0, когда Linq и IQueryable в помине не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 10:44 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
skyANAuser7320, ну вот что ты несешь? Я же сказал: два корня агрегации, два репозитория. По поводу IQueryObject: я первый раз использовал этот шаблон еще при .Net 2.0, когда Linq и IQueryable в помине не было. А есть случаи, когда репозиторий можно использовать в чистом виде, без всяких квири обджектов и прочих мутаций? Приведи пример, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 11:50 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
user7320skyANAuser7320, ну вот что ты несешь? Я же сказал: два корня агрегации, два репозитория. По поводу IQueryObject: я первый раз использовал этот шаблон еще при .Net 2.0, когда Linq и IQueryable в помине не было. А есть случаи, когда репозиторий можно использовать в чистом виде, без всяких квири обджектов и прочих мутаций? Приведи пример, пожалуйста. И когда это не приведёт к проблемам, которые описаны в блоге Бындю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 11:51 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
user7320, В принципе, поднимаешь правильные вопросы. Есть там проблемы с пониманием и с реализацией, но есть задачи которые он решает. Добавление абстракций приводит к некоторой потере в гибкости. За все нужно платить ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 12:10 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
user7320skyANAuser7320, ну вот что ты несешь? Я же сказал: два корня агрегации, два репозитория. По поводу IQueryObject: я первый раз использовал этот шаблон еще при .Net 2.0, когда Linq и IQueryable в помине не было. А есть случаи, когда репозиторий можно использовать в чистом виде, без всяких квири обджектов и прочих мутаций? Приведи пример, пожалуйста.Что такое чистый вид? Ты вообще описание шаблона Repository смотрел? Видел картинку? Понимаешь что такое aCriteria? Судя по тому, что у тебя сотня методов типа FindById, ни фига ты не видел и не разобрался. Но при этом разглагольствуешь про какие-то мутации Вот тебе репозиторий без всяких мутаций в виде сотни методов: Код: c# 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 14:02 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
Парамонuser7320, В принципе, поднимаешь правильные вопросы. Есть там проблемы с пониманием и с реализацией, но есть задачи которые он решает. Добавление абстракций приводит к некоторой потере в гибкости. За все нужно платить ) Я к тому, что, наверное, репозиторий сам по себе никогда не применяется и в чистом виде только в учебных статьях используется, типа этой . А этот дядька Фаулер, который этот репозиторий придумал (или всего лишь популяризовал?), об этом упомянуть забыл, похоже. Ну и заодно практически применимые мутации репозитория тоже не привёл, наверное (я его книжки не читал... но осуждаю, да). Поэтому спустя столько-то лет всякие бындю пишут статьи, как приготовить этот самый репозиторий по уму, и что в сыром виде он не съедобен. А раз до сих пор пишут, значит, общих выработанных подходов нет. Иначе бы не Фаулера с его репозиторием все рекомендовали, а Бындю с его мутациями репозитория. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 14:03 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
user7320user7320пропущено... А есть случаи, когда репозиторий можно использовать в чистом виде, без всяких квири обджектов и прочих мутаций? Приведи пример, пожалуйста. И когда это не приведёт к проблемам, которые описаны в блоге Бындю.Какие конкретно проблемы ты решить не можешь? У меня не возникало проблем, описываемых Бындю, потому как я изначально использовал шаблон "прямые ручки" и те подходы, что он предлагает в виде решения при реализации репозитория. Бындю же не первооткрыватель паттернов проектирования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 14:07 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
skyANAuser7320пропущено... А есть случаи, когда репозиторий можно использовать в чистом виде, без всяких квири обджектов и прочих мутаций? Приведи пример, пожалуйста.Что такое чистый вид? Ты вообще описание шаблона Repository смотрел? Видел картинку? Понимаешь что такое aCriteria? Критерий - это условие отбора, как я понял. Т. е. (Person.Id == 1) - это вариант критерия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 14:08 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
skyANAuser7320пропущено... А есть случаи, когда репозиторий можно использовать в чистом виде, без всяких квири обджектов и прочих мутаций? Приведи пример, пожалуйста.Что такое чистый вид? Ты вообще описание шаблона Repository смотрел? Видел картинку? Понимаешь что такое aCriteria? Судя по тому, что у тебя сотня методов типа FindById, ни фига ты не видел и не разобрался. Но при этом разглагольствуешь про какие-то мутации Вот тебе репозиторий без всяких мутаций в виде сотни методов: Код: c# 1. 2. 3. 4. 5. 6. Тут ещё вопрос, что понимать под критерием. Можно целый интерфейс, как вы, под него подвести. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 14:09 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
user7320Парамонuser7320, В принципе, поднимаешь правильные вопросы. Есть там проблемы с пониманием и с реализацией, но есть задачи которые он решает. Добавление абстракций приводит к некоторой потере в гибкости. За все нужно платить ) Я к тому, что, наверное, репозиторий сам по себе никогда не применяется и в чистом виде только в учебных статьях используется, типа этой . А этот дядька Фаулер, который этот репозиторий придумал (или всего лишь популяризовал?), об этом упомянуть забыл, похоже. Ну и заодно практически применимые мутации репозитория тоже не привёл, наверное (я его книжки не читал... но осуждаю, да). Поэтому спустя столько-то лет всякие бындю пишут статьи, как приготовить этот самый репозиторий по уму, и что в сыром виде он не съедобен. А раз до сих пор пишут, значит, общих выработанных подходов нет. Иначе бы не Фаулера с его репозиторием все рекомендовали, а Бындю с его мутациями репозитория.Всякие Бындю пишут статьи для тех, кто Буча, Фаулера, Эванса и т.п. не читал... И в результате получил реализацию с проблемами. Думаешь зачем он ссылки в конце статьи приводит на всякие DDD? Чтобы бездари разобрались-таки с проектированием, а не ждали пока он очередные проблемы в кучку соберёт и выдаст им готовое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 14:11 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
skyANAuser7320пропущено... И когда это не приведёт к проблемам, которые описаны в блоге Бындю.Какие конкретно проблемы ты решить не можешь? У меня не возникало проблем, описываемых Бындю, потому как я изначально использовал шаблон "прямые ручки" и те подходы, что он предлагает в виде решения при реализации репозитория. Бындю же не первооткрыватель паттернов проектирования Так я и говорю - это зависит от того, что понимать под критерием. Одни делают кучу методов и критерий фактически жёстко инкапсулирован в каждый метод. Т. е. FindById - один критерий и один метод, FindByNameAndCity - другой критерий и отдельный метод для него и т. д. У вас же, как я понимаю, нечто более гибкое и критерий задаётся в параметре, а сам метод один для всех возможных критериев для данной сущности (или корня аггрегации) . Но вот почему у вас несколько методов: Find, FindOne? Наверняка, и другие есть - типа Contains и других. А ведь надо ещё и вставки-удаления-обновления - короче, полный CRUD - реализовать. Т. е. методов в вашем подходе тоже немало - в средних БД за сотню уходит для полного КРУДа, наверное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 14:15 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
user7320Но вот почему у вас несколько методов: Find, FindOne? Наверняка, и другие есть - типа Contains и других. А ведь надо ещё и вставки-удаления-обновления - короче, полный CRUD - реализовать. Т. е. методов в вашем подходе тоже немало - в средних БД за сотню уходит для полного КРУДа, наверное.Что ты хочешь сказать-то? Обратимся снова к описанию шаблона: "A Repository mediates between the domain and data mapping layers, acting like an in-memory domain object collection ." А почему у List<T> несколько методов: Find, FindAll? А какие ещё методы есть у List<T>? А какие вообще методы работы с коллекциями есть? А как они реализованы в Linq? А какие параметры принимают? А какие есть реализации в других языках программирования, других решениях? Вот тебе примеры и методов и критериев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 14:25 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
skyANAuser7320Но вот почему у вас несколько методов: Find, FindOne? Наверняка, и другие есть - типа Contains и других. А ведь надо ещё и вставки-удаления-обновления - короче, полный CRUD - реализовать. Т. е. методов в вашем подходе тоже немало - в средних БД за сотню уходит для полного КРУДа, наверное.Что ты хочешь сказать-то? Обратимся снова к описанию шаблона: "A Repository mediates between the domain and data mapping layers, acting like an in-memory domain object collection ." А почему у List<T> несколько методов: Find, FindAll? А какие ещё методы есть у List<T>? А какие вообще методы работы с коллекциями есть? А как они реализованы в Linq? А какие параметры принимают? А какие есть реализации в других языках программирования, других решениях? Вот тебе примеры и методов и критериев. Я хочу сказать, а нельзя ли ещё усовершенствовать твой вариант? Вот у EF не просто Find, FindAll и пр., а сразу со связями всё - из одной сущности можно вытянуть связанные(ую) другие. А Find, FindAll и пр. - это всего лишь один из критерев отбора там - для множества или единственного результата. Т. е. сначала критерии по сущностям задаёшь, включая связанные сущности - т. е. фильтруешь данные, потом критерии множественности-единственности отбора. Вот как удобно! Короче, я хочу работать с репозиторием, как с EF - написал context и пошёл вытаскивать объекты цепочкой методов или вообще LINQ-выражением. Я не понимаю, почему в EF всё удобно, а в этих ваших репозиториях какие-то извращения с QueryObject и прочим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 14:42 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
user7320Короче, я хочу работать с репозиторием, как с EF Лучше так сказать: я хочу работать со всеми источниками данных, как с EF. Что мешает мне это сделать? Сложность реализации или что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 14:44 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
user7320user7320Короче, я хочу работать с репозиторием, как с EF Лучше так сказать: я хочу работать со всеми источниками данных, как с EF. Что мешает мне это сделать? Сложность реализации или что? Вот вы говорите "представь, что данные приходят не из БД, а из веб-сервиса". А я хочу с этим веб-сервисом работать как с EF - ЛИНКи там всякие, цепочки методов, лямбды. Что для этого надо сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 14:46 |
|
||
|
asp.net репо
|
|||
|---|---|---|---|
|
#18+
user7320, нет, ну тут ты разделяй - репозиторий и 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. вот интерфейс репозитория, который я применил в проекте. при реализации работать так же удобно, как и в EF. тут только запросы для отбора данных и CRUD операций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2014, 14:57 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=38590604&tid=1357527]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
79ms |
get tp. blocked users: |
2ms |
| others: | 264ms |
| total: | 429ms |

| 0 / 0 |
