Информация об изменениях

Сообщение Re[95]: Тормознутость и кривость linq от 30.04.2016 20:27

Изменено 30.04.2016 20:50 ·

Здравствуйте, alex_public, Вы писали:

_>Ты имеешь в виду компилируемым? ) Но тогда он будет уже зависеть от особенностей языка и соответствующих библиотек в нём. Так это просто идея была универсальная... Ну да ладно, чтобы не придирались (а то бывают тут неадекваты, которые сразу начнут орать "ааа не можешь", хотя задачка для школьника) покажу пример на той же самой библиотечке C++:

_>
_>auto q=dynamic_select(db).columns(all_of(Product)).dynamic_from(Product).dynamic_where();
_>if(categoryName||categoryColor||categoryGroupName) q.from.add(dynamic_join(Category).on(Category.id==Product.category_id));
_>if(categoryName) q.where.add(Category.name.like(*categoryName+"%"));
_>if(categoryColor) q.where.add(Category.color==*categoryColor);
_>if(categoryGroupName) q.where.add(Category.group_name==*categoryGroupName);
_>

И где обещанные compile-time проверки? Такую байду я и на PHP могу ваять. Как compiler проверит, что условие в первом if верное и ты не нарвёшься на unknown column из-за забытого join?

Да и вообще. Ты уже заметил разницу, что вместо трёх тривиальных if тебе пришлось забабахать ещё один магический новый (кстати надо было два, т.к. у меня было Category.Group.Name — т.е. ещё один join). А ведь мы ещё проекции не добавили, а ещё сортировки есть... Сложность кода растёт экспоненциально.
Re[95]: Тормознутость и кривость linq
Здравствуйте, alex_public, Вы писали:

_>Ты имеешь в виду компилируемым? ) Но тогда он будет уже зависеть от особенностей языка и соответствующих библиотек в нём. Так это просто идея была универсальная... Ну да ладно, чтобы не придирались (а то бывают тут неадекваты, которые сразу начнут орать "ааа не можешь", хотя задачка для школьника) покажу пример на той же самой библиотечке C++:

_>
_>auto q=dynamic_select(db).columns(all_of(Product)).dynamic_from(Product).dynamic_where();
_>if(categoryName||categoryColor||categoryGroupName) q.from.add(dynamic_join(Category).on(Category.id==Product.category_id));
_>if(categoryName) q.where.add(Category.name.like(*categoryName+"%"));
_>if(categoryColor) q.where.add(Category.color==*categoryColor);
_>if(categoryGroupName) q.where.add(Category.group_name==*categoryGroupName);
_>

И где обещанные compile-time проверки? Такую байду я и на PHP могу ваять. Как compiler проверит, что условие в первом if верное и ты не нарвёшься на unknown column из-за забытого join?

Да и вообще. Ты уже заметил разницу? Вместо трёх тривиальных if тебе пришлось забабахать ещё один магический новый (кстати надо было два, т.к. у меня было Category.Group.Name — т.е. ещё один join). А ведь мы ещё проекции не добавили, а ещё сортировки есть... Сложность кода растёт экспоненциально.