|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
Как считаете, на сколько оправдано выделять Entity-модель (POCO-классы) в отдельную сборку без зависимости от EF? Т.е. максимально минимизировать эту зависимость, не до 0 конечно, атрибутов из System.ComponentModel.* хватает для описания, а чего не хватает описывается кастомными атрибутами. Я в последнее время придерживаюсь этого подхода и пока подвоных камней не встретил. Хорошо для тестирования (в разы), хорошо для возможности «съехать» с монатками от EF на какой-нибудь другой ORM при необходимости, чистота. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2014, 21:27 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
В текущем исполнении EF6 полностью уйти от зависимости не получится, поэтому особого смысла не вижу. Вариант для самозадротов. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2014, 23:31 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
МСУВ текущем исполнении EF6 полностью уйти от зависимости не получится, поэтому особого смысла не вижу. Вариант для самозадротов. Например, от чего уйти не получилось? Пока что не сталкивался с этим. Примерный расклад: Data — Entity-модель (классы), интерфейсы, enum-ы и ничего больше, никакой логики. Data Access — EF-контекст, реализация интерфейсов (слоя) для доступа к данным (репозиторий) Data Logic — реализация бизнес-логики, зависит от Data, но не от Data Access Таким образом можно тестировать всё по отдельности. Для тестов не надо вообще создавать никаких EF-контекстов, и даже знать об их существовании, достаточно мокать репозитории. Data Access тестируется отдельно, любым предпочтительным способом, например, SQLite in memory, да что угодно. Спрашиваю, потому что интересно, на какие грабли мне ещё не довелось наступить, хотелось бы глубже разобраться. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 01:09 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
hVosttКак считаете, на сколько оправдано выделять Entity-модель (POCO-классы) в отдельную сборку без зависимости от EF?Всё как всегда, сначала предлагается инновация, потом начинаются мысли "а зачем?" :-) hVosttТ.е. максимально минимизировать эту зависимость, не до 0 конечно, атрибутов из System.ComponentModel.* хватает для описания, а чего не хватает описывается кастомными атрибутами.Fluent API ? hVosttЯ в последнее время придерживаюсь этого подхода и пока подвоных камней не встретил. Хорошо для тестирования (в разы),Проще/лучше тестовую БД подсунуть? Там и тестовые данные могут быть, и сохранение данных в транзакции с отменой можно протестировать. hVosttхорошо для возможности «съехать» с монатками от EF на какой-нибудь другой ORM при необходимостиВряд ли удастся сделать кросс-ОРМ-ные LINQ2SQL запросы. hVostt... чистота.Субъективно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 05:44 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
hVosttData Logic — реализация бизнес-логики, зависит от Data, но не от Data Access.Отделение логики от слоя, содержащего LINQ2SQL запросы, неминуемо приведёт к "N+1 запрос", со всеми вытекающими. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 05:47 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
Алексей КFluent API ? соглашения лучше, чем Fluent API. тебе же нравится декларативность Knockout? может ну её к лешему, лучше jQuery API? Алексей КПроще/лучше тестовую БД подсунуть? Там и тестовые данные могут быть, и сохранение данных в транзакции с отменой можно протестировать. для тестов как раз требуется тестить чисто логику, без БД. затем можно и с БД потестить. никто не мешает. в этом вся прелесть, в гибкости. Алексей КВряд ли удастся сделать кросс-ОРМ-ные LINQ2SQL запросы. а зачем они? все запросы в слое доступа к данным. какие хочешь. хоть прямые SQL в базу, да хоть через ассемблер прям в кишки системы. но через слой доступа. за его пределами никто ниче про ни про какие SQL не знает, да и знать не хочет. Алексей КСубъективно. Ну как же, чистота в плане взаимозаменяемости и тестируемости. вполне определённые объективные метрики же? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 08:31 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
Алексей КОтделение логики от слоя, содержащего LINQ2SQL запросы, неминуемо приведёт к "N+1 запрос", со всеми вытекающими. в смысле? что за N+1 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 08:32 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
hVosttАлексей КFluent API ? соглашения лучше, чем Fluent API. тебе же нравится декларативность Knockout? может ну её к лешему, лучше jQuery API? Fluent API не требует навешивания атрибутов, которые обычно специфичны для используемой ОРМ. Поэтому в твоих начинаниях Fluent API может быть полезен. Но я не настаиваю, просто предложил. :-) hVosttАлексей КПроще/лучше тестовую БД подсунуть? Там и тестовые данные могут быть, и сохранение данных в транзакции с отменой можно протестировать. для тестов как раз требуется тестить чисто логику, без БД. затем можно и с БД потестить. никто не мешает. в этом вся прелесть, в гибкости.Я не знаю как там у вас, у нас львиная доля логики выполняется в сгенерированном EF-ом SQL. Благодаря этому имеем максимальную производительность решения. Я не представляю выполнение логики без СУБД, хоть она и расположена в СП. hVosttАлексей КВряд ли удастся сделать кросс-ОРМ-ные LINQ2SQL запросы. а зачем они? все запросы в слое доступа к данным. какие хочешь. хоть прямые SQL в базу, да хоть через ассемблер прям в кишки системы. но через слой доступа. за его пределами никто ниче про ни про какие SQL не знает, да и знать не хочет.Нынче львиная доля логики выполнена в виде LINQ2SQL. Что поделать, тренд такой, и я с ним согласен. :-) hVosttАлексей КСубъективно. Ну как же, чистота в плане взаимозаменяемости и тестируемости. вполне определённые объективные метрики же?Мне производительность важнее. Строю архитектуру в первую очередь исходя из неё. Но я понимаю, что у всех своя специфика, возможно в твоём случае "N+1" на производительности существенно не сказывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 08:42 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
Алексей КВсё как всегда, сначала предлагается инновация, потом начинаются мысли "а зачем?" :-)EF вроде как не инновация, но вопрос правильный :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 08:46 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
hVosttАлексей КОтделение логики от слоя, содержащего LINQ2SQL запросы, неминуемо приведёт к "N+1 запрос", со всеми вытекающими. в смысле? что за N+1 Не знаю как у вас, в моём случае вынос логики из LINQ-запросов приведёт к следующему: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
В простонародье это называется "N+1 query". ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 08:49 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
Алексей КhVosttпропущено... в смысле? что за N+1 Не знаю как у вас, в моём случае вынос логики из LINQ-запросов приведёт к следующему: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
В простонародье это называется "N+1 query".Парадокс однако. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 08:56 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Не знаю как у вас, в моём случае вынос логики из LINQ-запросов приведёт к следующему: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
В простонародье это называется "N+1 query".Парадокс однако.Что за парадокс? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 09:20 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
hVosttМСУВ текущем исполнении EF6 полностью уйти от зависимости не получится, поэтому особого смысла не вижу. Вариант для самозадротов. Например, от чего уйти не получилось? Пока что не сталкивался с этим. Жжешь... А это что? hVosttТ.е. максимально минимизировать эту зависимость, не до 0 конечно hVosttТаким образом можно тестировать всё по отдельности. Для тестов не надо вообще создавать никаких EF-контекстов, и даже знать об их существовании, достаточно мокать репозитории. Так для тестов и так не надо никаких EF контекстов, мокай репо и всё. Внутри репо - black box. Зачем тебе еще саму EDM модель абстрагировать? hVosttСпрашиваю, потому что интересно, на какие грабли мне ещё не довелось наступить, хотелось бы глубже разобраться. Не вижу необходимости тестировать EF контекст и её слой. Там тестировать нечего, логики там ровным счетом ноль. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 09:23 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
МСУhVosttТаким образом можно тестировать всё по отдельности. Для тестов не надо вообще создавать никаких EF-контекстов, и даже знать об их существовании, достаточно мокать репозитории. Так для тестов и так не надо никаких EF контекстов, мокай репо и всё. Внутри репо - black box. Зачем тебе еще саму EDM модель абстрагировать? hVosttСпрашиваю, потому что интересно, на какие грабли мне ещё не довелось наступить, хотелось бы глубже разобраться. Не вижу необходимости тестировать EF контекст и её слой. Там тестировать нечего, логики там ровным счетом ноль.Ещё один архитектор-теоретег. Как же ты собрался мутить OData, если у тебя нет логики в LINQ2SQL ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 09:27 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
Алексей ККак же ты собрался мутить OData, если у тебя нет логики в LINQ2SQL ? Не путай тёплое с мягким, практег В OData на сервере - целая инфраструктура контроллеров, функций, экшенов, рутов, маппингов и прочего добра. Это полноценный сервис. Каким боком тут L2S и EF? Ты укурен? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 09:53 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
МСУАлексей ККак же ты собрался мутить OData, если у тебя нет логики в LINQ2SQL ? Не путай тёплое с мягким, практег В OData на сервере - целая инфраструктура контроллеров, функций, экшенов, рутов, маппингов и прочего добра. Это полноценный сервис. Каким боком тут L2S и EF? Ты укурен? Ну логично ОДату делать тупо на базе IQueryable от EF. Не? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 10:00 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
Алексей КНу логично ОДату делать тупо на базе IQueryable от EF. Не? :-) Не "ОДату делать", а " модель ОДаты делать" от EF. ОДата - это не EF, практег :) В ОДате модель абстрактна, то есть в эту IEdmModel можно воткнуть не только EF. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 10:07 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
МСУАлексей КНу логично ОДату делать тупо на базе IQueryable от EF. Не? :-) Не "ОДату делать", а " модель ОДаты делать" от EF.Ну назови это так, я не против. МСУОДата - это не EF, практег :) МСУВ ОДате модель абстрактна, то есть в эту IEdmModel можно воткнуть не только EF.Я не про "можно", а про "проще". ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 10:12 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
Алексей К, короче, любитель поклевать моск, в чем вопрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 10:21 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
Алексей КFluent API не требует навешивания атрибутов, которые обычно специфичны для используемой ОРМ. Поэтому в твоих начинаниях Fluent API может быть полезен. Но я не настаиваю, просто предложил. :-) Дак я же сразу сказал, что атрибутов из ComponentModel.* хватает, а они к EF прямого отношения не имеют. А если чего не хватает, то кастомные атрибуты + соглашения, которые при любом раскладе лучшу Fluent. Алексей КЯ не знаю как там у вас, у нас львиная доля логики выполняется в сгенерированном EF-ом SQL. Благодаря этому имеем максимальную производительность решения. Я не представляю выполнение логики без СУБД, хоть она и расположена в СП. Ну так у тебя есть слой доступа к данным. Делай там свой SQL, мы делаем когда потребуется. Например, понадобилось FTS на СУБД, пжалста. Просто в Entity-модели, знать об этих деталях совершенно ни к чему. Алексей КМне производительность важнее. Строю архитектуру в первую очередь исходя из неё. Но я понимаю, что у всех своя специфика, возможно в твоём случае "N+1" на производительности существенно не сказывается. Просто не вижу как это влияет на производительность. Говорю же в слое доступа можешь делать что угодно, хоть ядро ОС ковырять. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 10:27 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
Алексей КВ простонародье это называется "N+1 query". а, понял о чём ты. ну дак не вижу проблемы получить всё одним запросом, чистым LINQ. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 10:28 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
МСУЖжешь... А это что? hVosttТ.е. максимально минимизировать эту зависимость, не до 0 конечно 0 подразумевает вообще полное отсутствие. просто подразумевается, что слой доступа должен быть, для него вешаются эти атрибуты, просто детали реализации знать не надо, и следовательно прямой зависимости нет. МСУЗачем тебе еще саму EDM модель абстрагировать? так дело в том, что ты абстрагируешь слой доступа, а не EDM. что там внутри -- EDM, или NHibernate, или чистый ADO, это уже не важно. МСУТам тестировать нечего, логики там ровным счетом ноль. ну я бы не был так категоричен. покрытие 100% часто увеличивает ценник, истино тебе говорю ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 10:31 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
МСУАлексей К, короче, любитель поклевать моск, в чем вопрос? Кто виноват? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 10:34 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
hVosttАлексей КFluent API не требует навешивания атрибутов, которые обычно специфичны для используемой ОРМ. Поэтому в твоих начинаниях Fluent API может быть полезен. Но я не настаиваю, просто предложил. :-) Дак я же сразу сказал, что атрибутов из ComponentModel.* хватает, а они к EF прямого отношения не имеют.Перспективные ОРМ, на которые ты в будущем захочешь перейти, могут не уметь с ними работать. hVosttА если чего не хватает, то кастомные атрибуты + соглашения, которые при любом раскладе лучшу Fluent.В любом случае, я бы рассматривал Fluent как запасной вариант. hVosttАлексей КЯ не знаю как там у вас, у нас львиная доля логики выполняется в сгенерированном EF-ом SQL. Благодаря этому имеем максимальную производительность решения. Я не представляю выполнение логики без СУБД, хоть она и расположена в СП. Ну так у тебя есть слой доступа к данным. Делай там свой SQL, мы делаем когда потребуется. Например, понадобилось FTS на СУБД, пжалста. Просто в Entity-модели, знать об этих деталях совершенно ни к чему.Я не про SQL, я про LINQ. Например, может потребоваться использовать DbFunctions, специфичный для EF. Например, EF умеет выполнять LINQ запросы, возвращающие вложенные коллекции, а BLToolkit не умеет. Например, EF умеет транслировать в SQL DateTime.Now, а какой-нибудь другой ОРМ может этого не уметь. Примеров можно привести много. Считаю, что всё, что использует IQueryable, жёстко прибито к EF, надо смириться с этим. hVosttАлексей КМне производительность важнее. Строю архитектуру в первую очередь исходя из неё. Но я понимаю, что у всех своя специфика, возможно в твоём случае "N+1" на производительности существенно не сказывается. Просто не вижу как это влияет на производительность. Говорю же в слое доступа можешь делать что угодно, хоть ядро ОС ковырять.Так и делаем. Только в результате большая часть логики располагается в слое доступа, следовательно тестировать в других слоях просто нечего, логики в них нет или мало. В сложившейся ситуации самым разумным считаю использовать тестовую БД, что сразу и было предложено. :-) hVosttАлексей КВ простонародье это называется "N+1 query". а, понял о чём ты. ну дак не вижу проблемы получить всё одним запросом, чистым LINQ.В единичных случаях можно. Проблемы возникают при повторном использовании. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 10:47 |
|
Модель Entity без зависимости от EF
|
|||
---|---|---|---|
#18+
Алексей КВ любом случае, я бы рассматривал Fluent как запасной вариант. Тут спору нет. Алексей КПерспективные ОРМ, на которые ты в будущем захочешь перейти, могут не уметь с ними работать. Поймут, не пегеживай! Алексей КЯ не про SQL, я про LINQ. Например, может потребоваться использовать DbFunctions, специфичный для EF. Например, EF умеет выполнять LINQ запросы, возвращающие вложенные коллекции, а BLToolkit не умеет. Например, EF умеет транслировать в SQL DateTime.Now, а какой-нибудь другой ОРМ может этого не уметь. Примеров можно привести много. Считаю, что всё, что использует IQueryable, жёстко прибито к EF, надо смириться с этим. Вот не согласен. Давече пришлось работать с одной либой, которая решительно не жуёт DateTimeOffset в LINQ. Что делать? Простенький адаптер, и зажувала как миленькая Алексей КТак и делаем. Только в результате большая часть логики располагается в слое доступа, следовательно тестировать в других слоях просто нечего, логики в них нет или мало. В сложившейся ситуации самым разумным считаю использовать тестовую БД, что сразу и было предложено. :-) У тя бизнес-логика крепится к СУБД как рыба-прилипала? Это обосновано? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2014, 10:51 |
|
|
start [/forum/topic.php?fid=17&startmsg=38830737&tid=1349662]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
157ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 272ms |
0 / 0 |