|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
В EF DbContext и DbSet<T>, вообще говоря, реализуют из коробки соответственно UnitOfWork и Repository. Во всяком случае, сложилось такое мнение. Погуглил на этут тему, а там народ, следуя четко по букварям оборачивает их руками в свои классы, которые реализуют свои интерфейсы интерфейсы. Т. е. вводят что-то вроде: IRepository<T>, IUnitOfWork Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: sql 1. 2. 3. 4. 5.
Реализуют что-то вроде такого: EfRepository<T>, EfUnitOfWork Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Используют как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Вопрос в следующем и относится исключительно к случаю, когда используется EF Designer . Если поколупаться, для генерации Context'a используюься tt, которые можно менять как угодно, чтобы те выдавали уже готовые, какие надо классы обертки для контекста, дбсетов, чтобы оно само добавляло в наследование какие надо интерфейсы IUnitOfWork, IRepository и т. п.. Вопрос, почему так не делают через tt или я плохо искал или кто-то делает? Поделитесь впечатлениями/подходами. Вопрос второй, предположим мы абстрагировались с помощью интерфейсов по самое не могу от "инфраструктурной черни по книжкам умных дядек", и в нашей DomainModel'и ссылаемся на инфраструктурный слой исключительно по интерфейсам, возникает вопрос, как быть с Disconnected сценарием, когда граф обьектов приходит извне и его надо сохранить. В общем случае без ObjectStateManager здесь не выкрутиться. В голову приходит использовать какие-нибудь self tracking entities с контекстом, который их понимает (т. е. шаблон генерящий entities, генерирует их как self tracked и шаблон генерирующий контекст, делает его понимающим self tracked сущности. т. е. предполагается менять tt которые создаются вместе с edmx для достижения такого результата). Это все пока высосанное из пальца "...а что если вдруг?...". У кого какие соображения и т. п.. Интересно знать для понимания границ применимости и т. п.. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2013, 23:08 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord British, если у вас EF или NH - выкиньте к чёрту репозиторий. Общение с базой данных слишком сложный процесс, чтобы от него можно было хоть как-то абстрагироваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2013, 23:16 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SolYUtor, Я примерно это и хотел услышать, спасибо! Хотя предчувствую говносрач в этой темке :D. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2013, 23:23 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
EF по дефолту генерит репозиторий. Я устал объяснять, что написание репозитория над репозиторием - бренд сивой кобылы. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 01:05 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУEF по дефолту генерит репозиторий. Я устал объяснять, что написание репозитория над репозиторием - бренд сивой кобылы. Чего только не сделаешь для беглого доступа пользователей... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 01:59 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Программисты даже поиском пользоваться не умеют. Выбирай , руками никто не оборачивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 08:25 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa, судя по посту, вы придерживаетесь подхода - обернуть в свое. Понятно, все таки tt используют. Хотелось бы услышать мнение, из коробки оно и так UnitOfWork и Repository. Какие преимущества дает введение своего интерфейса IUnitOfWork и IRepository, кроме того, что можно проще написать FakeRepository для тестирования? И сферического в вакууме - DomainModel будет чиста от инфраструктурного кода и можно будет в теории сменить легко orm (слабо верится). Как живется с этим розовым миром в случае Disconnected сценария и. Concurrency. Не получается ли в итоге, что интерфейс IUnitOfWork и IRepisitory полностью или почти полностью дублирует публичный интерфейс классов DbContext, DbSet<>… Очень интересно узнать мнение. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 09:44 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa, вот, например, http://tdryan.blogspot.com/2011/03/another-entity-framework-4-repository_5988.html?m=1 человек вводит свои интерфейсы (типа абстрагировался по букварю) и следом вводит в них свойства вроде LazyLoading, ProxyEnabled и т. п.. И это независимость от инфраструктурного кода? А если усложнить сценарий использования? Масло масляное масло, нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 09:52 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
пардон, сцылко не то, вот правильное http://geekswithblogs.net/danemorgridge/archive/2010/06/28/entity-framework-repository-amp-unit-of-work-t4-template-on.aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 09:54 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord BritishSeVa, судя по посту, вы придерживаетесь подхода - обернуть в свое. Понятно, все таки tt используют. Хотелось бы услышать мнение, из коробки оно и так UnitOfWork и Repository. Какие преимущества дает введение своего интерфейса IUnitOfWork и IRepository, кроме того, что можно проще написать FakeRepository для тестирования? И сферического в вакууме - DomainModel будет чиста от инфраструктурного кода и можно будет в теории сменить легко orm (слабо верится). Как живется с этим розовым миром в случае Disconnected сценария и. Concurrency. Не получается ли в итоге, что интерфейс IUnitOfWork и IRepisitory полностью или почти полностью дублирует публичный интерфейс классов DbContext, DbSet<>… Очень интересно узнать мнение. Естественно, что репозитории для говнокода не нужны и об этом на неустанно напоминает MCУ. А в нормальной архитектуре должны соблюдаться принципы SOLID. Абстрактный интерфейс им отвечает, а все остальное нет. Имея его на руках можно не зависеть от доступа к БД и двигаться дальше. DAL - это копейки и в нормальном фреймворке его можно сменить. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 10:28 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord Britishпардон, сцылко не то, вот правильное http://geekswithblogs.net/danemorgridge/archive/2010/06/28/entity-framework-repository-amp-unit-of-work-t4-template-on.aspx Это статья ни о чем, вернее, для MCушек, которые не осилили DI и привыкли брать толстой задницей ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 10:29 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVa, Есть на примете по-вашему мнению правильные статьи применительно к EF? Поделитесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 13:08 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord British, вот тут копья ломали, Сева и им пододобные так и не осилили спич. Тема развивается не сначала, а отсюда: 13687982 Почитай, мож что предложишь своё. Тут реальный пример: http://codearticles.ru/Home/ArticleView/2155 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 13:20 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord BritishИ сферического в вакууме - DomainModel будет чиста от инфраструктурного кода и можно будет в теории сменить легко orm (слабо верится). Меня это тоже смущает, после всех чисток остается фактически одна структура - Anemic Domain Model и свалка DTO рядом. А смены orm на практике, так и не происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 13:26 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaLord Britishпардон, сцылко не то, вот правильное http://geekswithblogs.net/danemorgridge/archive/2010/06/28/entity-framework-repository-amp-unit-of-work-t4-template-on.aspx Это статья ни о чем, вернее, для MCушек, которые не осилили DI и привыкли брать толстой задницей Я щас почитал ту статью, до этого лишь смотрел по диагонали до определения интерфейсов репозитория и юнитофворк. Давайте абстрагируемся от реализации этих интерфейсов автором статьи, и тогда нам не важно использовал он ди или инстанциировал/собирал обьекты руками. Предположим у вас есть интерфейс репозитория как у автора статьи, разве можно с ним решить задачу в disconnected сценарии? Добавим сюда Concurrency, для навару. Ведь чтобы сохранить граф в этом случае, прийдется спуститься до кишок objectstatemanager, или пилить self tracked entity и реализацию контекста под них. Хотя последнее можно обернуть в юнитофворк/репозитори. Может вы сможете предложить достаточно полные интерфейсы, позволяющие это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 13:31 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, спасибо гляну. Но врядли что-то предложу, так как порват боян и в узел завязанныи, да и я не фаулер. А может оно и клучшему? :) Парамон, угу. Пишу с трубы так что стоит за отпечатки. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 13:41 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонLord BritishИ сферического в вакууме - DomainModel будет чиста от инфраструктурного кода и можно будет в теории сменить легко orm (слабо верится). Меня это тоже смущает, после всех чисток остается фактически одна структура - Anemic Domain Model и свалка DTO рядом. А смены orm на практике, так и не происходит. А не только сменой ORM под знамя маршируем, есть еще 70% задач, в которых в бизнес слое нужно оперировать комплексными сущностями, напр: ProductInfo (ProductId, ProductName, CategoryName) которые получаются из чистых дата классов (Product, Category). Без DTO никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 13:52 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Посему я и предлагаю чистый MVP подход - IDataService. В реализации своих сервисов может быть что угодно, никаких дополнительных EF репозиториев - сам контекст априори репозиторий. Вообщем, берем попкорн и читаем срач. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 13:56 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ ProductInfo (ProductId, ProductName, CategoryName) которые получаются из чистых дата классов (Product, Category). Без DTO никак. Вот только как через него сложные пропертя и методы протягивать? Если в сервис слой, то мдель совсем стирильная остается. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 14:25 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ПарамонМСУ ProductInfo (ProductId, ProductName, CategoryName) которые получаются из чистых дата классов (Product, Category). Без DTO никак. Вот только как через него сложные пропертя и методы протягивать? Если в сервис слой, то мдель совсем стирильная остается. В DTO "сложным пропертям" и методам делать нечего. есть дата класс есть DTO (обвязка одного или нескольких дата классов) есть модель (бизнес-логика, которая оперирует DTO классами) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 14:33 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
Lord BritishSeVaпропущено... Это статья ни о чем, вернее, для MCушек, которые не осилили DI и привыкли брать толстой задницей Я щас почитал ту статью, до этого лишь смотрел по диагонали до определения интерфейсов репозитория и юнитофворк. Давайте абстрагируемся от реализации этих интерфейсов автором статьи, и тогда нам не важно использовал он ди или инстанциировал/собирал обьекты руками. Предположим у вас есть интерфейс репозитория как у автора статьи, разве можно с ним решить задачу в disconnected сценарии? Добавим сюда Concurrency, для навару. Ведь чтобы сохранить граф в этом случае, прийдется спуститься до кишок objectstatemanager, или пилить self tracked entity и реализацию контекста под них. Хотя последнее можно обернуть в юнитофворк/репозитори. Может вы сможете предложить достаточно полные интерфейсы, позволяющие это сделать? Вопросы правильные, тк один DAl - это мизер в 5%. Для разработки клиентских приложений без геморроя нужно еще по крайней мере: - валидация - реализация интерфейсов ошибок и изменений - поддержка полного графа объектов - undo\redo - ленивая загрузка - переносимость - возможность переключения с 2х звенки на 3х - etc Реализация все этого - весьма нетривиальная задача, но если это не реализовано, то клиентская часть превращается в говнокод(убожество в виде asp.net - отдельная история непригодная для бизнес-приложений, которую я даже не рассматриваю). Все это есть в csla(dal может быть любой + можно полностью абстрагироваться с помощью ObjectFactory). Если бы я сейчас делал все с нуля, то я бы внимательно рассмотрел на web api c OData, в которых есть приятные моменты, которых раньше не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 14:35 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУПосему я и предлагаю чистый MVP подход - IDataService. В реализации своих сервисов может быть что угодно, никаких дополнительных EF репозиториев - сам контекст априори репозиторий. Вообщем, берем попкорн и читаем срач. Херня на постном масле, которая пригодна только для говносборников и отстойных рецептов. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 14:40 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
SeVaМСУПосему я и предлагаю чистый MVP подход - IDataService. В реализации своих сервисов может быть что угодно, никаких дополнительных EF репозиториев - сам контекст априори репозиторий. Вообщем, берем попкорн и читаем срач. Херня на постном масле, которая пригодна только для говносборников и отстойных рецептов. Иди это Фаулеру расскажи. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 14:43 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
МСУ, а что такое ДТО? есть концепт - Накладная, состоит из Шапки и Спецификация кто тут кто? (класс, ДТО) что читает ОРМ - Накладную? или по отдельности Ш и С? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 14:54 |
|
EF, Repository, UnitOfWork
|
|||
---|---|---|---|
#18+
ViPRosМСУ, а что такое ДТО? http://msdn.microsoft.com/en-us/library/ff649585.aspx ViPRosесть концепт - Накладная, состоит из Шапки и Спецификация кто тут кто? (класс, ДТО) что читает ОРМ - Накладную? или по отдельности Ш и С? Что не ясно отсюда? 13762103 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2013, 14:56 |
|
|
start [/forum/topic.php?fid=17&fpage=28&tid=1350110]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 276ms |
total: | 434ms |
0 / 0 |