Re[6]: Entity Framework за! и против!
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.08.14 18:28
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, gandjustas, Вы писали:


НС>>>Сейчас, в принципе, ни одна ORM не доросла до уровня, который позволит абстрагироваться от ее специфики. Так что попытка такую абстракцию ввести — классический случай leaky abstraction со всеми вытекающими.


G>>Дело не в конкретных ORM

НС>Конечно не в конкретных. Потому что ровно 100% ORM не способны полностью спрятать детали реализации. Причем с тяжелыми ORM вообще сразу все понятно. Из легковесных linq2db продвинулась дальше всего, но и там такое море специфики, что о полной абстракции не приходится даже мечтать. Итого, нетекущая абстракция сейчас возможна только на уровне самых простых запросов с явными джойнами.
Что ты понимаешь под "полной абстракциией" ? Даже если на уровне синтаксиса запросов к БД привести все к общему знаменателю, то на уровне семантики и быстродействия все равно найдутся различия. А попытка сделать объектную обертку над ОРМ ни к чему хорошему не приводит.

G>>SQL очень выразительный язык, гораздо выразительнее любого мейнстримного языка,


НС>Чего? Я тебе как садовод могу сказать, что даже та выразительность, что дает expression tree в шарпе на голову выше, чем выразительность SQL. Потому что постоянно приходится сталкиваться с ситуацией, когда тривиальное выражение на linq невозможно или очень сложно оттранслировать в SQL. Банальный group by порой таких жестких приседаний на sql требует, что в пору застрелиться.

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

SQL (на примере TSQL) умеет, а Linq нет:
1) CTE и рекурсию
2) ranking-функции и агрегаты с partition
3) MERGE-оператор
4) PIVOT\UNPIVOT

G>> Linq создавался как раз чтобы не сильно отставать по выразительности от SQL.

НС>Это ты сам придумал?
Нет, об этом Мейер говорил. Он еще в Haskell такое изобретал.


G>>Вот Синклер рассказывал к чему приводит "абстрагирование" http://rsdn.ru/forum/design/5682243
Автор: Sinclair
Дата: 10.07.14

НС>Он то расказал правильно, а вот ты понял его как то странно, судя по всему.
А ты тогда о чем говоришь?
Различия в СУБД не позволяют эффективно построить один API для любой СУБД. А Linq в этих случаях как раз и используется как генератор СУБД-специфичных запросов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.