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

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


G>>Что ты понимаешь под "полной абстракциией" ?


НС>Чтобы писать код не задумываясь о деталях реализации ORM. Сейчас таких ORM нет.


В первую очередь нужно задумываться о той СУБД, для которой пишешь. Это уже не дает возможности полностью абстрагироваться.

G>>То что можно больше написать не означает что выразительность выше.

НС>Как раз таки означает.

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

НС>Перл элементарно транслируется в банальный плоский С. Так что негодная у тебя аналогия.
Любой императивный язык транслируется в C. Даже SQL транслируется в C. Это не говорит о выразительности.

НС>Проблема не в транслируемости конструкций, а в том что вполне осмысленные, нормально выглядящие и работающие на linq2objects конструкции на SQL фик переведешь.

Обратное также верно. Если мы говорим о работе с данными в СУБД, то linq менее выразителен, чем SQL.

G>>SQL (на примере TSQL) умеет, а Linq нет:

G>>1) CTE и рекурсию
НС>СТЕ сама по себе линку просто не нужна. А поддердка рекурсии — вопрос конкретных провайдеров, которым просто никто не занимался всерьез.
В linq нет средств для рекурсии.

G>>2) ranking-функции и агрегаты с partition

НС>Это вообще не проблема.

G>>3) MERGE-оператор

НС>Тоже не проблема.

Что значит "не проблема" ?
Как можно написать в Linq простое выражения вроде:
select rank() over (partition by customerid order by orderdate  desc) as r, sum() over (partition by customerid order by orderdate desc) from orders

Увы в linq таких средств нет


G>>4) PIVOT\UNPIVOT

НС>Опять же вопрос конкретного провайдера. Выразительных функций линка хватает за глаза.
НС>При этом есть несколько моментов, которые действительно несколько фигово в линке выражаются по сравнению с сиквелом. Но ни один из них ты не упомянул.
То что ты не видишь не значит что их нет.

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

НС>>>Это ты сам придумал?
G>>Нет, об этом Мейер говорил.
НС>Эрик? Ссылку можно? А то я немножко на эту тему с ним общался, и ничего подобного не услышал.
Это очень давно было, сейчас не найду даже.

НС>>>Он то расказал правильно, а вот ты понял его как то странно, судя по всему.

G>>А ты тогда о чем говоришь?
НС>Я, кажется, вполне понятно написал. Любая ОРМ, если попытаться от нее абстрагироваться, приведет к leaky abstraction. Без вариантов. Что тебе в этом утверждении непонятно?
ты отвечаешь не на то, что я писал.
Я говорил что нет смысла абстрагироваться, так как приложение обычно затачивается на работу с конкретной СУБД.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.