powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EntityFramework и паттерн Repository
121 сообщений из 121, показаны все 5 страниц
EntityFramework и паттерн Repository
    #39677384
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С коллегами на работе сложились разногласия относительно необходимости реализации паттерна Repository в ASP.NET MVC при наличии EntityFramework. Одни говорят, что не требуется, так как уже EF всё реализует, другие (и я в их числе) говорят что он (паттерн Repository) просто немного видоизменился и теперь это не чистый DAL, а еще и Pagination, Row Level Security и Model -> ViewModel mapping и прочие полезности этого слоя.

А как вы считаете?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677394
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677395
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ссылко не тот! ищи EF Repository
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677396
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EF + Repository там где постов > 100
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677401
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaА как вы считаете?
Репозиторий - это полная абстракция от системы хранения, а не только от конкретной РСУБД.

К примеру у нас в Абрикосе есть темы: https://www.wildapricot.com/membership-website-themes

С точки зрения хранения - это набор файлов. С точки зрения домена приложения - это корень агрегации Theme.
И вот ThemeRepository по указанной спецификации возвращает нужную тему: оригинальную, или кастомную.
Первая - это набор файлов, что изначально создали мы; последняя - это частично расширенная, или полностью переработанная клиентами.
И вот оригинальных тем относительно мало и они хранятся на машине локально, а кастомных относительно много и они хранятся на сетевой шаре.
И, как Вы понимаете, при каждом запросе собирать корень агрегации с диска, или с сетевой шары, это чертовски нагладно.
Поэтому реализован двухуровневый кэш: MemoryCache + Couchbase. Реализован он через шаблон Декоратор.
Подключается/отключается через IoC.

И при этом для вызывающего кода работа со всем этим выглядит как repository.GetTheme(specification) .
И это не изменится, если сетевая шара будет послана и заменена на микросервис писанный на Go, или на MongoDB GridFS
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677414
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaА как вы считаете?

Вообще, при использовании EF, лепить сверху паттерн Репозиторий совсем не обязательно. В этом есть как и плюсы, так и минусы. Если вы совершенно точно никогда за рамки EF в своих проектах не выйдите, и за рамки одной единственной БД, то не нужен вам этот репозиторий.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677415
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Calabonga,

Можно запилить простой generic репозиторий, под каждую сущность, на IQueryable, и это решит ваши концептуальные проблемы в спорах, зато будет больше гибкости, и способности к изменениям вырастут на порядке.

Конечно совсем по феншую это CQS, и отказ от EF, в пользу команд и запросов. Но это дорого на начальном этапе.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677485
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Calabongaразногласия относительно необходимостине нужен
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677544
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttCalabongaА как вы считаете?

Вообще, при использовании EF, лепить сверху паттерн Репозиторий совсем не обязательно. В этом есть как и плюсы, так и минусы. Если вы совершенно точно никогда за рамки EF в своих проектах не выйдите, и за рамки одной единственной БД, то не нужен вам этот репозиторий.

В общем-то, идея понятна. Но хочу тогда уточнить, что есть EntityFramework не реализует Pagination, Row Level Security и Model -> ViewModel mapping, то где реализуете данную логику если не используюте Repository??? Я-то себе сделал nuget обобщенный репозиторий.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677549
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaВ общем-то, идея понятна. Но хочу тогда уточнить, что есть EntityFramework не реализует Pagination, Row Level Security и Model -> ViewModel mapping, то где реализуете данную логику если не используюте Repository???Например для Pagination удобно использовать расширяющие методы для IQueryable.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677556
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaEntityFramework не реализует Pagination
А почему нужно все пихать что даже не всегда нужно?
Пагинация нужна строго для грида с пагинацией.
И правильно сказали делается одной строчкой.
Тоже самое и с остальным.
....
Если бы ты показал as is to be и весь ужас сегодняшнего EF тогда конечно.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677576
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaЯ-то себе сделал nuget обобщенный
Гы... https://aspnetboilerplate.com/Pages/Documents/EntityFramework-Integration
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677580
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaВ общем-то, идея понятна. Но хочу тогда уточнить, что есть EntityFramework не реализует Pagination, Row Level Security и Model -> ViewModel mapping, то где реализуете данную логику если не используюте Repository??? Я-то себе сделал nuget обобщенный репозиторий.

EF реализует Pagination через интерфейсы IQueryable Take/Skip.

В обязанности репозитория не входит обеспечение Row Level Security, реализовывать его там -- вколачивать кривые ржавые костыли.

Посмотри паттерн Спецификация и его реализации на IQueryable (гуглится на раз). Это то, что тебе нужно для сесурыти )

Model -> ViewModel должен делать контроллер, с помощью AutoMapper, например. Это его задача, а не репозитория, который совершенно точно не должен знать и понятий иметь ни о каких вью моделях.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677581
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANACalabongaЯ-то себе сделал nuget обобщенный
Гы... https://aspnetboilerplate.com/Pages/Documents/EntityFramework-Integration

В общем, кто во что горазд.

Поэтому, на не больших проектах и даже средненьких можно легко обходится без доп. слоя репо, так как EF им и является. А в больших EF и не нужен вовсе
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677589
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaНо хочу тогда уточнить, что есть EntityFramework не реализует Pagination, Row Level Security и Model -> ViewModel mapping, то где реализуете данную логику если не используюте Repository???
One Domain-Driven-Design solution to the problem of where to place querying, sorting, and paging logic is to use a Specification .

https://deviq.com/specification-pattern/
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677594
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Calabonga,

Посмотрел на нугет, перешёл на сайт, глянул исходники.
Я считаю, что разделение на ReadableRepositoryBase и Writeable это ошибка.
Репозиторий по своей сути, это набор методов:

GetById
Add
Remove
Update

Это идеальный во всех смыслах репозиторий. Отсадить выполнение запросов надо не в репозиторий "только для чтения" -- это немного асбурдно, так как репо хранит объекты, сущности, а результы запроса самые разные, далеко не сущности, а некие проекции, аггрегации, суммы, группировки. Это все не задачи репозитория.

Т.е. надо IRepository и типа IQueryService если уж на то пошло. IQueryService принимает либо Query Object, либо работает со спецификациями и позволяет теребонькать за IQueryable.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677597
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttCalabonga,

Посмотрел на нугет, перешёл на сайт, глянул исходники.
Я считаю, что разделение на ReadableRepositoryBase и Writeable это ошибка.
Репозиторий по своей сути, это набор методов:

GetById
Add
Remove
Update

Это идеальный во всех смыслах репозиторий. Отсадить выполнение запросов надо не в репозиторий "только для чтения" -- это немного асбурдно, так как репо хранит объекты, сущности, а результы запроса самые разные, далеко не сущности, а некие проекции, аггрегации, суммы, группировки. Это все не задачи репозитория.

Т.е. надо IRepository и типа IQueryService если уж на то пошло. IQueryService принимает либо Query Object, либо работает со спецификациями и позволяет теребонькать за IQueryable.
Мы же это вроде как обсуждали уже в мае
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677600
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAМы же это вроде как обсуждали уже в мае

Повторение матерь учения :)
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677849
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,


Выставлять IQueryable наружу это мовитон, ибо с юнит тестами к нему не подлезешь. А то что сборка разбита на две части, это только плюс, потому что в зависимости от ролей пользователя он получит только то, что можно. Очень удобно инжектить. Да реализация проще, например есть только сайты для чтения fate name.ru например. Думаю позже на два пакета разбить, чтобы ставить только то, что нужно.

А что касается "идельного", ты вы же сказали, что модно и без него если есть EF... :)
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677851
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,


Думаю вам нужно ознакомиться с плюсами и минусами выставления наружу IQueryable. Не все так гладко в этом вопросе.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677859
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кто тут предлагал выставлять его наружу? Только в сервисный слой.
Или что такое "ружа" в вашем понимании?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677861
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaА что касается "идельного", ты вы же сказали, что модно и без него если есть EF... :)
Можно вообще никакие паттерны не использовать в проекте, где есть EF, не пристрелят
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677871
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaА то что сборка разбита на две части, это только плюс, потому что в зависимости от ролей пользователя он получит только то, что можно.В плане? Запретить какой-то роли писать, какой-то читать в рамках одного репозитория? Легко.

CalabongaОчень удобно инжектить.Один generic repository тоже очень удобно инжектить.

CalabongaДа реализация проще, например есть только сайты для чтения fate name.ru например.Дык реализуйте метод GetById, а в методах Add, Remove, Update киньте исключение: "Ай, ай, ай, у нас сайт только для чтения, какой суке понадобилось дёрнуть Add?!"

А вообще давно уже придумали CQS.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677880
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProА кто тут предлагал выставлять его наружу? Только в сервисный слой.
Или что такое "ружа" в вашем понимании?+1 Moжно и в модели, если она чуть толще голых сущностей.
Ну и потом он десктоп забыл.
Все его примеры от MVC web идут.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39677897
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaНе все так гладко в этом вопросе.увы.
В жизни все не гладко).
Вот MS взяло и сделало реализацию репозитария в виде DBSet<T>
И поди докажи что у тебя репо лучше) и программистам легче).
Дописывать EF это все равно что Мону Лизу дорисовывать).
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39678014
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaВыставлять IQueryable наружу это мовитон, ибо с юнит тестами к нему не подлезешь.

Честно говоря, сколько слышу по моветоновость IQueryable, так и не увидел ни одного примера с ним, где могут быть проблемы. Тестировать IQueryable совсем не сложно, вариантов несколько, от тупого List, который сидит за IQueryable, до разбора выражения, но это уже паранойя :)

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

Отделять чтение от записи, это правильно, поэтому придумали CQS. Но у вас не CQS, вы просто распилили интерфейсы, без видимого профита. И запросы у вас нельзя писать отдельно. Нельзя собирать запросы из частей, например, взять спецификации безопасности и дополнить бизнес-фильтрами так, чтобы это можно было писать, сопровождать и тестировать по-отдельности. У вас нельзя.

Учитывая, что в EF запись ведётся через трекинг, ваши интерфейсы WriteOnly не имеют смысла абсолютно. На EF без проекций вообще нельзя сделать адекватный CQS.

Очень плохо, что вы вью-модели протащили на уровень репозитариев. Это прям кричащее нарушение всех принципов проектирования.

CalabongaА что касается "идельного", ты вы же сказали, что модно и без него если есть EF... :)

Да, потому что лишние прослойки может быть overengineering, который таки полезен для обучения и для практики, но может просто увеличить время разработки без видимого профита.

CalabongaДумаю вам нужно ознакомиться с плюсами и минусами выставления наружу IQueryable. Не все так гладко в этом вопросе.

За всю свою практику в десятках проектов от больших и малых, я никаких минусов не увидел. Это замечательный интерфейс, с которым удобно работать и который прячет подробности реализации: на IQueryable может быть как List, так и БД. Да, его можно скрыть за спецификациями, и это будет в плюс. Но плюс будет в том, что вы таким образом сможете комбинировать запросы, писать и сопровождать их отдельно, также исправлять и дорабатывать эти запросы, без необходимости ковыряться в прикладном коде.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39680704
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем участникам, много интересного подчеркнул для себя.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39680706
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не подчерпнул? Именно подчеркнул?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39699812
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотелось бы показать уважаемой публике еще одну реализацию Repository. На этот раз эта песня про Repository для EntityFramework на базе Specification.

Конструктивная критика приветствуется.

Calabonga.SpecRepositoryCore
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39699815
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaХотелось бы показать уважаемой публике еще одну реализацию Repository. На этот раз эта песня про Repository для EntityFramework на базе Specification.

Конструктивная критика приветствуется.

Calabonga.SpecRepositoryCore

а где исходники?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39699816
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя не понимаю, что там может быть нового в репозитории.
"на базе Specification" - это уже звучит как-то странно
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39699882
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
love_bach,

В самом территории - Ничего! А вот реализации бывают разные! Это надо понимать! :)
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39700006
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaКонструктивная критика приветствуется.ну вы должны понимать, что из за ef паттерном интересуются меньше.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39700683
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Calabonga,

Если исходников нет, хотя бы сгенерируйте документацию АПИ, это не сложно.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39700697
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,


Если подскажите как сгенерироваться - буду весьма признателен
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39704642
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Calabonga,

Нужно поставить, чтобы при сборке генерились XML из комментариев.

А потом заюзать тулузу, например такую: https://dotnet.github.io/docfx/
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39712790
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то не увидел в дискурсии как именно к этому народ собственно подходит.
Есть 2 очевидных подхода:

- Не использовать репозиторий: все ЕF запросы зацементированы в методах сервисного класса. Из минусов плохая читаемость, нагромождение кода, возможно дублирование логики запросов, ужасы при юнит-тестировании
- Использовать репозиторий: 2 разновидности, с IQuerable и без.
-а) IQuerable: Из минусов ЕF Контекст должен будет жить где-то в сессии что может приводить к проблемам. Из плюсов отсутствие методов типа GetCustomerByName(), и в то-же время возможность переиспользования методов со сложной логикой
-б) IEnumerable: Из минусов методы типа GetCustomerByName(), из плюсов ЕF Контекст диспозится сразу при выходе из метода.

Так кто как делает?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39712843
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessyp,
Вы о чем? Где увидели цемент запросов?
Код дайте.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39712845
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessypужасывыражайтесь инженерным языком.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39712899
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypКак-то не увидел в дискурсии как именно к этому народ собственно подходит.
Есть 2 очевидных подхода:

- Не использовать репозиторий: все ЕF запросы зацементированы в методах сервисного класса. Из минусов плохая читаемость, нагромождение кода, возможно дублирование логики запросов, ужасы при юнит-тестировании
- Использовать репозиторий: 2 разновидности, с IQuerable и без.
-а) IQuerable: Из минусов ЕF Контекст должен будет жить где-то в сессии что может приводить к проблемам. Из плюсов отсутствие методов типа GetCustomerByName(), и в то-же время возможность переиспользования методов со сложной логикой
-б) IEnumerable: Из минусов методы типа GetCustomerByName(), из плюсов ЕF Контекст диспозится сразу при выходе из метода.

Так кто как делает?
Не а и не б.

в) Репозиторий + спецификация и никаких GetCustomerByName()
г) CQRS

И не использую EF.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39712955
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНе а и не б.

в) Репозиторий + спецификация и никаких GetCustomerByName()
г) CQRS

ок, вариант в) Репозиторий + спецификация (IEnumerable)
Только куда-же GetCustomerByName() то делись? Спецификацию-же как-то задаете?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39712963
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypskyANAНе а и не б.

в) Репозиторий + спецификация и никаких GetCustomerByName()
г) CQRS

ок, вариант в) Репозиторий + спецификация (IEnumerable)
Только куда-же GetCustomerByName() то делись? Спецификацию-же как-то задаете?
Спецификация - это шаблон такой.

Метод GetCustomerByName не нужен, так как фильтр по имени передаётся в объекте спецификации.

Погуглите "repository and specification pattern".
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39712967
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAСпецификация - это шаблон такой.

Метод GetCustomerByName не нужен, так как фильтр по имени передаётся в объекте спецификации.

Погуглите "repository and specification pattern".
я в курсе про этот паттерн, потому и спрашиваю, ведь при определении спецификации вам все равно надо задавать условие CustomerName == value
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39712976
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypskyANAСпецификация - это шаблон такой.

Метод GetCustomerByName не нужен, так как фильтр по имени передаётся в объекте спецификации.

Погуглите "repository and specification pattern".
я в курсе про этот паттерн, потому и спрашиваю, ведь при определении спецификации вам все равно надо задавать условие CustomerName == value
Да надо. И с IQuerable надо, и с CQRS. К чему Вы клонит? Никак не пойму.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39712984
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypТолько куда-же GetCustomerByName() то делись

оформились в спецификацию, например, CustomerByNameSpecification

но не нужно путать это с фильтрацией
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39713000
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAК чему Вы клонит? Никак не пойму.

к этому:

hVosttоформились в спецификацию, например, CustomerByNameSpecification

ок, итого имеем в наличии:

1. Не использовать репозиторий: все ЕF запросы зацементированы в методах сервисного класса
2. Использовать репозиторий:
_2.1) IQuerable
_2.2) IEnumerable
___2.2.1) Интерфейс задается методами (GetCustomerByName)
___2.2.2) Интерфейс задается спецификацией (CustomerByNameSpecification)

Пока единственный "проголосовавший" - за метод 2.2.2
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39713025
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessypок, итого имеем в наличии:

1. Не использовать репозиторий: все ЕF запросы зацементированы в методах сервисного класса
Вы специально игнорируете упоминание CQRS?

3. Не использовать репозиторий, а использовать CQRS и никакого цементирования в методах сервисного класса.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39713026
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypПока единственный "проголосовавший" - за метод 2.2.2
А теперь смотрим на диаграмму с сайта Мартина Фаулера ( repository ):



Criteria (спецификация) определяется отдельно и передаётся репозиторию.
Вы реально думаете, что я единственный, кто придерживается этой схеме?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39713087
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

это закрытая вендорная разработка

Lessyp,

1. не знаю, с чего вы это решили
2. нужно понять что такое репозиторий для начала, почитать у Фаулера, а то все "знают", а на деле нет ни знаний, ни понимания.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39713499
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВы специально игнорируете упоминание CQRS?
3. Не использовать репозиторий, а использовать CQRS и никакого цементирования в методах сервисного класса.
отнюдь. Просто в CQRS у вас все равно будут вариации на тему зацементированности или репозиториев

1. Не использовать репозиторий: все ЕF запросы зацементированы в методах сервисного класса
2. Использовать репозиторий:
_2.1) IQuerable
_2.2) IEnumerable
___2.2.1) Интерфейс задается методами (GetCustomerByName)
___2.2.2) Интерфейс задается спецификацией (CustomerByNameSpecification)
3. CQRS
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39714013
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypskyANAВы специально игнорируете упоминание CQRS?
3. Не использовать репозиторий, а использовать CQRS и никакого цементирования в методах сервисного класса.
отнюдь. Просто в CQRS у вас все равно будут вариации на тему зацементированности или репозиториев
А слабо пример привести?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39714182
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessyp,

не будет зацементированности.

давайте я приведу каноничную реализацию репозитория:

FindById
Add
Update
Delete

всё. а где, спросите, GetAll, GetList, GetQuery....
можно найти массу решений, и даже примеры в статьях, где подобные методы есть.
но это неправильно.

в CQRS, вообще ничего такого нет от слова совсем.
а где, где же вот это вот всё?
ответ: Query Object, можно посмотреть в чужих исходниках вариации на тему QueryProcessor, QueryHandler etc.

если это не CQRS, то может быть добавлен ещё один метод

GetBySpecification

а ещё, не забываем про пейджинг. его нужно закладывать изначально для всех.
да, даже для долбаных справочников, где _НУ_СОВЕРШЕННО_ТОЧНО_НИКОГДА!!__ не будет больше 3-х записей. дичайшие нарушения, за которые надо руки по шею отрывать, начинаются вот с таких тупейших посылов.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39714737
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttне будет зацементированности.

так я и говорю, что будет либо цементирование, либо репозиторий. Все что вы говорите про репозитории уже разложено выше, мы их 4 подвида определили
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39714788
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessyphVosttне будет зацементированности.

так я и говорю, что будет либо цементирование, либо репозиторий
У тебя может и будет, но мы не понимаем, с чего вдруг. Пример приведи уже.

В случае с CQRS ЕF запросы будут инкапсулированны в отдельных классах, а не зацементированы в методах сервисного класса, чего бы это не значило
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39714858
Фотография Arpanx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А куда инкапсулировать запросы которые не относятся к Entity ?

Допустим мне нравиться Repository и я реализовал их с Specification . В процессе написания программы возникают всякие абстрактные сущности типа Себестоимость , чтобы его вычислить нужно перелопатить много разных Entity.
Куда этот запрос можно инкапсулировать? И запросов, их будет много видов, для каждого цеха своя методика расчета, своя портянка SQL.
Как это оформляется? Tянуть Entity в память и на C# писать бизнес-логику или DBcontext получать на слое сервисов?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39714920
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArpanxА куда инкапсулировать запросы которые не относятся к Entity ?

Допустим мне нравиться Repository и я реализовал их с Specification . В процессе написания программы возникают всякие абстрактные сущности типа Себестоимость , чтобы его вычислить нужно перелопатить много разных Entity.
Куда этот запрос можно инкапсулировать? И запросов, их будет много видов, для каждого цеха своя методика расчета, своя портянка SQL.
Как это оформляется? Tянуть Entity в память и на C# писать бизнес-логику или DBcontext получать на слое сервисов?
Ну, они себестоимость не считают
а для "показать картинку, вставить картинку" можно и репозиторий со спесификейшн и CQRS с бубном :)
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715107
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosArpanxА куда инкапсулировать запросы которые не относятся к Entity ?

Допустим мне нравиться Repository и я реализовал их с Specification . В процессе написания программы возникают всякие абстрактные сущности типа Себестоимость , чтобы его вычислить нужно перелопатить много разных Entity.
Куда этот запрос можно инкапсулировать? И запросов, их будет много видов, для каждого цеха своя методика расчета, своя портянка SQL.
Как это оформляется? Tянуть Entity в память и на C# писать бизнес-логику или DBcontext получать на слое сервисов?
Ну, они себестоимость не считают
а для "показать картинку, вставить картинку" можно и репозиторий со спесификейшн и CQRS с бубном :)
Что это не считаем, считаем.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715110
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArpanxА куда инкапсулировать запросы которые не относятся к Entity ?

Допустим мне нравиться Repository и я реализовал их с Specification . В процессе написания программы возникают всякие абстрактные сущности типа Себестоимость , чтобы его вычислить нужно перелопатить много разных Entity.
Куда этот запрос можно инкапсулировать? И запросов, их будет много видов, для каждого цеха своя методика расчета, своя портянка SQL.
Как это оформляется? Tянуть Entity в память и на C# писать бизнес-логику или DBcontext получать на слое сервисов?
Я не пойму, Вы под запросом вызов хранимой процедуры подразумеваете, раз про "на C# писать бизнес-логику" пишете?

С точки зрения CQRS это будет команда, внутри которой вызов хранимой процедуры.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715115
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosа для "показать картинку, вставить картинку" можно и репозиторий со спесификейшн и CQRS с бубном :)
а для "показать какие расчёты в каком сейчас состоянии, добавить задачу на расчёт себестоимости" также можно и репозиторий со спесификейшн и CQRS с бубном :)

Просто головой подумать надо немножко.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715155
Фотография Arpanx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
Ну да, я изначально и хотел/подумал "вот CQRS решение моих проблем", потом где-то тут же вычитал, "а спецификации можно комбинировать, а Query нет", думаю ну ладно, пусть будет Repository.
По поводу портянок SQL-кода (на 2500 строк, которые склеиваются на сервере приложения с помощью С# и скармливаются базе через ADO.NET), код который вычисляет какие-то абстрактные данные для отчетов, которые потом не требуют сохранения, думаю да заверну их в query object pattern . Думаю это было от большого ума написано. Нечего бизнес логику в SQL-е писать. Вполне можно разобрать на получение из Repository данных и логику написать на С#, так будет легче, понятней и можно будет тестировать.

Но все равно, есть же ситуации когда надо выполнить какой нибудь комплексный/сложный запрос, который абстрактный и не принадлежит ни к одной Entity, в таких случаях буду разрешать себе использовать DBContext (запросы Read-only), пока так.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715238
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosНу, они себестоимость не считают
а для "показать картинку, вставить картинку" можно и репозиторий со спесификейшн и CQRS с бубном :)

Мы ещё тестируем.
Но деревенские мужики суровы, и тестов не используют.
Метод фуяк-фуяк, методичный, отработанный, и плюёт на эти ваши паттерны и спесификейшен...

Да?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715239
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arpanx,

Ах.. всё в поисках серебряной пилюли.
Эта печаль подстерегает многих, кто думает

вот ща как заиспользую технологию X, и всё у меня будет хорошо
и женщины появятся
и деньги потекут рекой...
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715240
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAС точки зрения CQRS это будет команда, внутри которой вызов хранимой процедуры.

Если +ES, то конечно нет. Никаких хранимых процедур )
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715287
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosНу, они себестоимость не считают
а для "показать картинку, вставить картинку" можно и репозиторий со спесификейшн и CQRS с бубном :)

Мы ещё тестируем.
Но деревенские мужики суровы, и тестов не используют.
Метод фуяк-фуяк, методичный, отработанный, и плюёт на эти ваши паттерны и спесификейшен...

Да?
Мозгов не хватит написать тесты для моих методов (иначе прямо в комитет за нобелевской)
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715328
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAС точки зрения CQRS это будет команда, внутри которой вызов хранимой процедуры.

Если +ES, то конечно нет. Никаких хранимых процедур )
Это да, я просто думал, что у комрада Arpanx проблема как вызвать хранимку.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715331
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArpanxskyANA
Ну да, я изначально и хотел/подумал "вот CQRS решение моих проблем", потом где-то тут же вычитал, "а спецификации можно комбинировать, а Query нет", думаю ну ладно, пусть будет Repository.
По поводу портянок SQL-кода (на 2500 строк, которые склеиваются на сервере приложения с помощью С# и скармливаются базе через ADO.NET), код который вычисляет какие-то абстрактные данные для отчетов, которые потом не требуют сохранения, думаю да заверну их в query object pattern . Думаю это было от большого ума написано. Нечего бизнес логику в SQL-е писать. Вполне можно разобрать на получение из Repository данных и логику написать на С#, так будет легче, понятней и можно будет тестировать.

Но все равно, есть же ситуации когда надо выполнить какой нибудь комплексный/сложный запрос, который абстрактный и не принадлежит ни к одной Entity, в таких случаях буду разрешать себе использовать DBContext (запросы Read-only), пока так.
Может конкретный пример приведёте?
А то ударяетесь с ходу в какие-то пространные рассуждения, из которых не понятно, а в чём конкретно проблема.

SQL код на 2500 строк, который вычисляет какие-то абстрактные данные для отчетов, знаете как можно упростить?
Вычислять эти данные при добавлении, изменении, удалении и сохранять. Потом отчёт строится очень быстро и элементарным запросом.

15 лет назад на первой работе научили
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715333
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arpanxя изначально и хотел/подумал "вот CQRS решение моих проблем", потом где-то тут же вычитал, "а спецификации можно комбинировать, а Query нет", думаю ну ладно, пусть будет Repository
А что нужно комбинировать-то? Какие-нибудь параметры? Дак в CQRS с этим проблем нет.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715334
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arpanxв таких случаях буду разрешать себе использовать DBContext (запросы Read-only)
А чё не Dapper?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715350
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arpanx,

и может вообще пора задуматься об OLAP?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715457
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosМозгов не хватит написать тесты для моих методов (иначе прямо в комитет за нобелевской)

Всё ТАК плохо?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715689
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

напиши тест на вывод числе фибаноччи, или поиск пути минимальной длина на графе, или суммы/факториала/да че угодно от 1 до n,... :)

Я напишу метод который отработает для твоих тестов, но воще будет ошибочен
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715729
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRoshVostt,

напиши тест на вывод числе фибаноччи, или поиск пути минимальной длина на графе, или суммы/факториала/да че угодно от 1 до n,... :)

Я напишу метод который отработает для твоих тестов, но воще будет ошибочен

легко.

поиск пути (при заданном алгориме) - это итерации. вот и проверяем: шаг при заданных входных
с фибоначи не сложнее. есть таблицы. вот и проверяем по ним
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715794
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRoshVostt,

напиши тест на вывод числе фибаноччи, или поиск пути минимальной длина на графе, или суммы/факториала/да че угодно от 1 до n,... :)

Я напишу метод который отработает для твоих тестов, но воще будет ошибочен

Алгоритмы твои тогда на чем основаны? Чем докажешь, что они работают? Ну кроме твоего авторитетного слова? )
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715815
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosнапиши тест на вывод числе фибаноччи
В гугле забанили? "fibonacci unit test"
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715839
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRoshVostt,

напиши тест на вывод числе фибаноччи, или поиск пути минимальной длина на графе, или суммы/факториала/да че угодно от 1 до n,... :)

Я напишу метод который отработает для твоих тестов, но воще будет ошибочен

Алгоритмы твои тогда на чем основаны? Чем докажешь, что они работают? Ну кроме твоего авторитетного слова? )
Вощем ты в отличии от гуглистов понимаешь что тесты должны быть СЛОЖНЕЕ чем тестируемые методы?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715841
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachViPRoshVostt,

напиши тест на вывод числе фибаноччи, или поиск пути минимальной длина на графе, или суммы/факториала/да че угодно от 1 до n,... :)

Я напишу метод который отработает для твоих тестов, но воще будет ошибочен

легко.

поиск пути (при заданном алгориме) - это итерации. вот и проверяем: шаг при заданных входных
с фибоначи не сложнее. есть таблицы. вот и проверяем по ним
Это не тестирование а фуфель
раньше давали так называемый Контрольный пример и если прога на этом примере норм отрабатывала, то принимали
дык вот люди именно эту задачу и решали :)
так и ваши тесты глупые
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715859
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, затянул своё унылое ворчание.
Сахават, что ты ещё тут вообще делаешь? Пора на пенсию, прикупи домик, выращивай базилик...
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715889
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухУ тебя может и будет, но мы не понимаем, с чего вдруг. Пример приведи уже.

В случае с CQRS ЕF запросы будут инкапсулированны в отдельных классах, а не зацементированы в методах сервисного класса, чего бы это не значило
В случае с CQRS (и EF) командная ее часть будет в репозиториях, а запросная - либо тоже в репозиториях в виде одного из подтипов указанных выше, либо зацементирована. Если вдруг у вас как-то по-другому, то примеры как раз вам и надо приводить
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715898
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypДмитрий МухУ тебя может и будет, но мы не понимаем, с чего вдруг. Пример приведи уже.

В случае с CQRS ЕF запросы будут инкапсулированны в отдельных классах, а не зацементированы в методах сервисного класса, чего бы это не значило
В случае с CQRS (и EF) командная ее часть будет в репозиториях, а запросная - либо тоже в репозиториях в виде одного из подтипов указанных выше, либо зацементирована. Если вдруг у вас как-то по-другому, то примеры как раз вам и надо приводить
Теперь стало ясно, что Вы CQRS в глаза не видели. Погуглили бы что-ли, прежде чем писать, примеров полно.
Лично я их на этом форуме уже приводил и ссылки давал.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715900
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessyp,

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

Верно?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715903
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Муххотя я похоже понял: Вы стали смотреть, что такое CQRS, наткнулись на пару примеров, где в CommandHandler прокидывается именно репозиторий и решили, что только так и бывает.

Верно?
в коммерческих проектах не применял, верно, но самой идеи уже 100 лет в обед, ее в самом начале ООП придумали. И да, на каждый агрегат в команде нужен репозиторий. У вас по-другому? Ну так приведите пример, я-ж не против. Но я изначально говорил не столько про команды (с ними все понятно вне зависимости от ваших примеров), сколько про чтение. Вы заявили, что ни репозиториев, ни цементирования в классах для чтения у вас нет. Отлично, ждем пример того, что есть
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39715930
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypДмитрий Муххотя я похоже понял: Вы стали смотреть, что такое CQRS, наткнулись на пару примеров, где в CommandHandler прокидывается именно репозиторий и решили, что только так и бывает.

Верно?
в коммерческих проектах не применял, верно, но самой идеи уже 100 лет в обед, ее в самом начале ООП придумали. И да, на каждый агрегат в команде нужен репозиторий. У вас по-другому? Ну так приведите пример, я-ж не против. Но я изначально говорил не столько про команды (с ними все понятно вне зависимости от ваших примеров), сколько про чтение. Вы заявили, что ни репозиториев, ни цементирования в классах для чтения у вас нет. Отлично, ждем пример того, что есть
Давайте с начала. Вы написали, цитирую ( 21694802 ):
Lessypвсе ЕF запросы зацементированы в методах сервисного класса
Не про инкапсуляцию одного запроса в отдельном классе, а именно про "в методах" и именно "сервисного класса".
Вот именно пример такого и хотелось бы увидеть.

Я приводил простейшую демонстрацию в форуме "Разработка информационных систем", теме "Локальная сеть: web-браузер или десктоп":
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
using Context = ApplicationQueryContext;

public class ApplicationQuery : SqlQuery<Context, Application>
{
    protected override IDbCommand CreateCommand(Context context)
    {
        var command = new SqlCommand("sp_application_select") { CommandType = CommandType.StoredProcedure };

        command.Parameters.AddWithValue("guid", context.Guid);
        command.Parameters.AddWithValue("name", context.Name);

        return command;
    }

    protected override Application ToResult(IDataRecord record)
    {
        return new Application { ... };
    }
}


Вызов:
Код: c#
1.
gridApplications.ItemsSource = query.Ask(queryContext).AsObservable();


Как видите ни репозиториев, ни цементирования в методах сервисного класса.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716055
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНе про инкапсуляцию одного запроса в отдельном классе, а именно про "в методах" и именно "сервисного класса".
Вот именно пример такого и хотелось бы увидеть.

увидеть пример как можно EF зацементировать в класс сервиса? Неужели не догадываетесь?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public void NotifyCustomers()
{
var myCustomers = db.Customers.Where(c=>c.Region == "Russia").Select(c=>Convert).toList()
myCustomers.foreach(c=>c.SendNotification())
...
myCustomers.foreach(c=>c.IsNotified = true);
db.SaveChanges()
}



skyANAЯ приводил простейшую демонстрацию в форуме "Разработка информационных систем", теме "Локальная сеть: web-браузер или десктоп":
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
using Context = ApplicationQueryContext;

public class ApplicationQuery : SqlQuery<Context, Application>
{
    protected override IDbCommand CreateCommand(Context context)
    {
        var command = new SqlCommand("sp_application_select") { CommandType = CommandType.StoredProcedure };

        command.Parameters.AddWithValue("guid", context.Guid);
        command.Parameters.AddWithValue("name", context.Name);

        return command;
    }

    protected override Application ToResult(IDataRecord record)
    {
        return new Application { ... };
    }
}


Вызов:
Код: c#
1.
gridApplications.ItemsSource = query.Ask(queryContext).AsObservable();


Как видите ни репозиториев, ни цементирования в методах сервисного класса.
ok. Зацементировали в хранимой процедуре. И чем собствено это отличается от репозитория, где я могу точно также вызвать ХП или прямо там написать запрос на linq?
Какие конкретно преимущества? И как именно это относится к CQRS?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716066
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessypидеть пример как можно EF зацементировать в класс сервиса? Неужели не догадываетесь?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public void NotifyCustomers()
{
var myCustomers = db.Customers.Where(c=>c.Region == "Russia").Select(c=>Convert).toList()
myCustomers.foreach(c=>c.SendNotification())
...
myCustomers.foreach(c=>c.IsNotified = true);
db.SaveChanges()
}


В случае с CQRS работа с EF будет инкапсулированна в команде, или запросе, а не в методах сервисного класса.
Согласен, или по пятому кругу пойдём?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716074
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessyp,

вообще меня конечно ход Ваших мыслей поражает.

Давайте фигли запросы цементировать прямо в батонкликах. А почему бы и нет?
Это же вариация на тему зацементированности, вариация. Так какая тогда на фиг разница?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716341
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRoshVosttпропущено...


Алгоритмы твои тогда на чем основаны? Чем докажешь, что они работают? Ну кроме твоего авторитетного слова? )
Вощем ты в отличии от гуглистов понимаешь что тесты должны быть СЛОЖНЕЕ чем тестируемые методы?

Алгоритмы не тестируются с помощью принятых подходов юнит-тестирования.
Например, чтобы потестировать метод сортировки, бессмысленно давать какие-то входные данные и проверять, отсортированы они или нет в конечном счёте. Нужно использовать методы доказательства алгоритмов, а тестировать только, выполняются ли требуемые шаги в реализации алгоритмов.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716349
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлгоритмы не тестируются с помощью принятых подходов юнит-тестирования.
Например, чтобы потестировать метод сортировки, бессмысленно давать какие-то входные данные и проверять, отсортированы они или нет в конечном счёте. Нужно использовать методы доказательства алгоритмов, а тестировать только, выполняются ли требуемые шаги в реализации алгоритмов.

Против методов доказательства правильности программ ничего не имею, а тестирование, которое вам навязали, фуфло бестолковое,.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716356
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

Поясни.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716417
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

Ну лан. Чего только нам не навязали. Ээээх.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716478
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRoshVosttАлгоритмы не тестируются с помощью принятых подходов юнит-тестирования.
Например, чтобы потестировать метод сортировки, бессмысленно давать какие-то входные данные и проверять, отсортированы они или нет в конечном счёте. Нужно использовать методы доказательства алгоритмов, а тестировать только, выполняются ли требуемые шаги в реализации алгоритмов.

Против методов доказательства правильности программ ничего не имею, а тестирование, которое вам навязали, фуфло бестолковое,.
Да, да, навязали.. А ещё они "Союз" поломали..
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716480
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВ случае с CQRS работа с EF будет инкапсулированна в команде, или запросе, а не в методах сервисного класса.
Согласен, или по пятому кругу пойдём?
разумеется цементирование в классе сервиса это антипаттерн. Я-же написал его минусы в самом первом посте

вы не ответили на мой пост:

Lessypok. Зацементировали в хранимой процедуре. И чем собствено это отличается от репозитория, где я могу точно также вызвать ХП или прямо там написать запрос на linq?
Какие конкретно преимущества? И как именно это относится к CQRS?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716481
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessyp,

Вы поняли, что можно не использовать репозиторий и при этом не будет цементирования в классе сервиса?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716485
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВы поняли, что можно не использовать репозиторий и при этом не будет цементирования в классе сервиса?
почему вы так упорно избегаете ответа на мой вопрос? Я могу повторить его еще раз - можете-ли вы указать какие именно преимущества имеет то, что вы написали перед вызовом метода репозитория?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716489
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessyp,

я не избегаю, а просто сначала хочу убедиться в том, что Вы поняли то, что можно не использовать репозиторий и при этом не будет цементирования в классе сервиса.

Вы поняли? Если да, то мы продолжим дискуссию.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716494
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAя не избегаю, а просто сначала хочу убедиться в том, что Вы поняли то, что можно не использовать репозиторий и при этом не будет цементирования в классе сервиса.

Вы поняли? Если да, то мы продолжим дискуссию.
то, что вы написали не отличается от вызова репозитория. Поэтому я и прошу вас написать в чем разница
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716495
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypskyANAя не избегаю, а просто сначала хочу убедиться в том, что Вы поняли то, что можно не использовать репозиторий и при этом не будет цементирования в классе сервиса.

Вы поняли? Если да, то мы продолжим дискуссию.
то, что вы написали не отличается от вызова репозитория. Поэтому я и прошу вас написать в чем разница
Я вроде ясно выразился, что напишу, в чём разница, но сначала хочу убедиться в том,
что Вы поняли, что можно не использовать репозиторий и при этом не будет цементирования в классе сервиса.

Вы поняли?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716574
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухЯ вроде ясно выразился, что напишу, в чём разница, но сначала хочу убедиться в том,
что Вы поняли, что можно не использовать репозиторий и при этом не будет цементирования в классе сервиса.

Вы поняли?
Вы написали репозиторий, просто назвали его другим словом, поэтому пока не напишите чем именно это отличается от репозитория дискутировать не имеет смысла
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39716598
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypДмитрий МухЯ вроде ясно выразился, что напишу, в чём разница, но сначала хочу убедиться в том,
что Вы поняли, что можно не использовать репозиторий и при этом не будет цементирования в классе сервиса.

Вы поняли?
Вы написали репозиторий, просто назвали его другим словом, поэтому пока не напишите чем именно это отличается от репозитория дискутировать не имеет смысла
О, я вижу Вы вообще не понимаете, что такое репозиторий. Дискутировать действительно не имеет смысла.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39717061
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessypможете-ли вы указать какие именно преимущества имеет то, что вы написали перед вызовом метода репозитория?
В данном примере - никаких. Тут скорее всего подразумевается паттерн query object, реализация которого по-сути представляет собой по мини репозиторию на каждый метод "классического" репозитория.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39717067
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerS,

реализаций может быть множество, данные могут доставться из MongoDB, кэшироваться в Couchbase и памяти, запрашиваться у стороннего сервиса.
А для вызывающей стороны - это всё будет просто вызовом метода репозитория. И при этом никакого нарушения принципа единственности ответсвенности.

Но если подходить с точки зрения, что где-то там всё равно как-то зацементирован какой-то запрос, то да, нет никакой разницы между следующими двумя каринками

Типичная схема:


CQRS:
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39717090
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух,

Второе УГ полное в таком виде.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39717098
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

а в таком:



?

Хотя для тебя уже всё давно УГ. Был Сахават, да весь вышел.

Кстати, что скажешь о Бертране Мейере?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39717547
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух,

Эта схема показывает только одно - кто то не может описывать свою систему в парадигме ООП и ему приходится вводить туда суррогат в виде ДТО. Его ли это вино? Скорее - нет. Сама парадигма имеет небольшую сферу применимости (описание прошлого) и натягивать ее на жизнь в развитии и прогнозе всегда будет приводить к таким уродствам в виде ДТО и т.д.

Бертран Мейер ООшник. :)
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39717645
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosДмитрий Мух,

Эта схема показывает только одно...
ИМХО ты просто не понял этой схемы.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39717646
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosему приходится вводить туда суррогат в виде ДТО
А ты что предлагаешь?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39717657
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAViPRosему приходится вводить туда суррогат в виде ДТО
А ты что предлагаешь?
Вернуться назад:
Структуры + Алгоритмы = Программа.

Только в явной распределенной среде. Т.е. с явным messaging что ли.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39717663
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAViPRosДмитрий Мух,

Эта схема показывает только одно...
ИМХО ты просто не понял этой схемы.
Да какая нафиг схема.
В принципе правая часть требует набор аргументов некоторых методов объектов (или некоторый набор что бы можно было на его основе сгенерировать набор аргументов некоторого метода), что бы взаимодействовать с крупными персистентными объектами.
При этом этот набор (называемый ДТО) никаким боком не относится к объекту (т.е. не типизирован).
Все это придумали тупые люди.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39717860
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosВернуться назад:
Структуры + Алгоритмы = Программа.

Только в явной распределенной среде. Т.е. с явным messaging что ли.

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


Это прям разные миры с диаметральными взглядами.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39717890
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosskyANAпропущено...

А ты что предлагаешь?
Вернуться назад:
Структуры + Алгоритмы = Программа.

Только в явной распределенной среде. Т.е. с явным messaging что ли.
А это чем не структуры + алгоритмы в распределенной среде?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39717891
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosskyANAпропущено...

ИМХО ты просто не понял этой схемы.
Да какая нафиг схема.
В принципе правая часть требует набор аргументов некоторых методов объектов (или некоторый набор что бы можно было на его основе сгенерировать набор аргументов некоторого метода), что бы взаимодействовать с крупными персистентными объектами.
При этом этот набор (называемый ДТО) никаким боком не относится к объекту (т.е. не типизирован).
Все это придумали тупые люди.
С чего вдруг не типизирован? И в чем конкретно тупость?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39717892
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosБертран Мейер ООшник. :)
Расшифруй. Объектоно ориентировошник? И это очень хорошо?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39718063
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAViPRosБертран Мейер ООшник. :)
Расшифруй. Объектоно ориентировошник? И это очень хорошо?
И это плохо.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39718072
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА это чем не структуры + алгоритмы в распределенной среде?
Надо - котлеты отдельно, мухи отдельно, инфраструктура отдельно.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39718099
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosskyANAпропущено...

Расшифруй. Объектоно ориентировошник? И это очень хорошо?
И это плохо.
Не понимаю тебя.
Ты пишешь, что надо "описывать свою систему в парадигме ООП", но при этом "Объектоно ориентировошник" - это плохо.

Если не сложно, то объясни свою точку зрения толком.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39718104
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosskyANAА это чем не структуры + алгоритмы в распределенной среде?
Надо - котлеты отдельно, мухи отдельно, инфраструктура отдельно.
А можешь привести конкретный пример? А то такие общие фразы - это ни о чём.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39718139
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAТы пишешь, что надо "описывать свою систему в парадигме ООП"


Где я это написал?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39718538
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosskyANAТы пишешь, что надо "описывать свою систему в парадигме ООП"


Где я это написал?Где, где, выше: "Эта схема показывает только одно - кто то не может описывать свою систему в парадигме ООП".
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39718719
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAViPRosпропущено...


Где я это написал?Где, где, выше: "Эта схема показывает только одно - кто то не может описывать свою систему в парадигме ООП".
Я же не написал, что надо в ООП, а написал что пытается, но не может и начинает костыли придумывать в виде всяких ДТО.
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39719121
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosskyANAпропущено...
Где, где, выше: "Эта схема показывает только одно - кто то не может описывать свою систему в парадигме ООП".
Я же не написал, что надо в ООП, а написал что пытается, но не может и начинает костыли придумывать в виде всяких ДТО.
А с чего ты тогда взял, что пытается?
Может наоборот понимает, что не надо "описывать свою систему в парадигме ООП"?
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39719134
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух,

там же слова - маркеры, любой дурак видит чьи длинные уши торчат слева, чье рыло справа
...
Рейтинг: 0 / 0
EntityFramework и паттерн Repository
    #39719138
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosДмитрий Мух,

там же слова - маркеры, любой дурак видит чьи длинные уши торчат слева, чье рыло справа
Какие конкретно слова, перечисли, если не сложно?
...
Рейтинг: 0 / 0
121 сообщений из 121, показаны все 5 страниц
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EntityFramework и паттерн Repository
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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