Мозаичный форум  

Вернуться   Мозаичный форум > О мире > Цифровые технологии, программирование и сайтостроительство
Галерея Справка Пользователи Календарь Сообщения за день

Цифровые технологии, программирование и сайтостроительство Полупрофессиональный подраздел. Подробное описание раздела находится в прикреплённой теме.

Ответ
 
Опции темы
Старый 28.07.2009, 02:21   #1
Modus
дитя Ренессанса
 
Аватар для Modus
 
Регистрация: 29.05.2008
Сообщений: 2,346
Modus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастер
Злость Linq

Полтора года назад я начал разрабатывать фреймворк Botan, включающий в себя ORM и генератор форм. Сейчас он в несколько доработанном виде внедрен в реальную практику, и я, удовлетворив свои творческие амбиции и наигравшись в красивую архитектуру, решил больше не выпендриваться, и освоить-таки стандартный Linq2Sql. Я и раньше бегло изучал этот ORM, и он казался мне очень неплохим.

Через полчаса после попытки сделать на нём пробное приложение радость удалилась далеко и надолго. Похоже, что на трансляции лямбда-выражений в SQL-запросы его прелести заканчиваются. То, что для обработки изменений значений свойств он генерирует partial-методы, воспроизводится за полчаса: большая трудоёмкость только в создании обработчика лямбда-выражений. Причём большая настолько, что делать это самому - сущее безумие.

Я давно уже думал о том, чтобы прикрутить к Botan класс SqlProvider, который преобразует лямбда-выражения в SQL-запросы в Linq2Sql, но пока не придумал как. Похоже, что придётся обойтись без этой доли прогрессивного синтаксического сахара и сидеть на старом добром паттерне Query object.

Вот уж воистину, свои велосипеды ближе к телу. При всём уважении к Microsoft.
__________________
Инструменты сердятся, когда на них не играют
Modus вне форума   Ответить с цитированием
Старый 28.07.2009, 02:38   #2
Makinson
take a look
 
Аватар для Makinson
 
Регистрация: 03.03.2008
Сообщений: 2,119
Makinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душой
неправильно ты дядя Фёдор бутерброд ешь...
Makinson вне форума   Ответить с цитированием
Старый 28.07.2009, 07:05   #3
Виктор
Мохнатый Красношёрстный
 
Аватар для Виктор
 
Регистрация: 01.04.2006
Адрес: Красноярск
Сообщений: 2,476
Виктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастер
Modus, а если взять заведомо упрощённый синтаксис. Сходу могу порекомендовать синтаксис @ функций от LotusNotes. @Функция(Параметр1; Параметр2; Параметр3;..)
__________________
Хрю-Кхе-Кхе
Обитающий в ЖЖ: http://victor-zagorski.livejournal.com
Виктор вне форума   Ответить с цитированием
Старый 28.07.2009, 10:35   #4
Modus
дитя Ренессанса
 
Аватар для Modus
 
Регистрация: 29.05.2008
Сообщений: 2,346
Modus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастер
В LotusNotes задача языковой интеграции не решена. По идее, фишка Linq как раз в том, что запросы к базе пишутся прямо в коде на C# со всеми примуществами строгой типизацией и т.п. После работы в Axapta я относился к Linq в духе "давно пора".

А так - что в связке .NET + SQL, что в Lotus Notes, императивная часть и функцональная пишутся на разных языках, которые как-то друг с другом взаимодействуют. Я хотел отойти от методов 2005 года, перейти на более современные технологии, но столкнулся с тем, что они нифига не удобнее.

Макинсон, а как правильно?
__________________
Инструменты сердятся, когда на них не играют
Modus вне форума   Ответить с цитированием
Старый 28.07.2009, 10:42   #5
Виктор
Мохнатый Красношёрстный
 
Аватар для Виктор
 
Регистрация: 01.04.2006
Адрес: Красноярск
Сообщений: 2,476
Виктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастер
Да, не решена, только это глюк не синтаксиса, а среды.

Я этот синтаксис потому предложил, что он однозначный, парсер писать -- плёвое дело. Остаётся только словарь определить. Ну и изначально заложить расширяемость.
__________________
Хрю-Кхе-Кхе
Обитающий в ЖЖ: http://victor-zagorski.livejournal.com
Виктор вне форума   Ответить с цитированием
Старый 28.07.2009, 11:06   #6
Modus
дитя Ренессанса
 
Аватар для Modus
 
Регистрация: 29.05.2008
Сообщений: 2,346
Modus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастер
Парсер там в принципе не нужен. Лямбда-выражения в C# уже приходят в виде дерева. Нужно по этому дереву построить запрос SQL. Я не владею математическим аппаратом преобразования одного дерева в другое, да и представление лямбда-выражений в виде дерева простотой не отличается. DevExpress'овские фильтры я в свою объектную модель запроса уже преобразую, но кривовато, работает только в простых случаях (для реальной практики годится, потому что сложные случаи маловероятны).

Кстати, Макинсон, очень рад тебя видеть тут в добром здравии.
__________________
Инструменты сердятся, когда на них не играют
Modus вне форума   Ответить с цитированием
Старый 28.07.2009, 11:35   #7
Виктор
Мохнатый Красношёрстный
 
Аватар для Виктор
 
Регистрация: 01.04.2006
Адрес: Красноярск
Сообщений: 2,476
Виктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастерВиктор мастер
Формат дерева покурить где можно? Может тоже где заюзаю.
__________________
Хрю-Кхе-Кхе
Обитающий в ЖЖ: http://victor-zagorski.livejournal.com
Виктор вне форума   Ответить с цитированием
Старый 28.07.2009, 14:07   #8
Modus
дитя Ренессанса
 
Аватар для Modus
 
Регистрация: 29.05.2008
Сообщений: 2,346
Modus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастер
Ничего лучше чем http://blogs.msdn.com/charlie/archiv...ee-basics.aspx не нагуглил.
__________________
Инструменты сердятся, когда на них не играют
Modus вне форума   Ответить с цитированием
Старый 28.07.2009, 16:44   #9
Makinson
take a look
 
Аватар для Makinson
 
Регистрация: 03.03.2008
Сообщений: 2,119
Makinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душойMakinson мастер, работающий с душой
Спасибо.
Я не знаток этой тематики...
Makinson вне форума   Ответить с цитированием
Старый 28.07.2009, 17:49   #10
Modus
дитя Ренессанса
 
Аватар для Modus
 
Регистрация: 29.05.2008
Сообщений: 2,346
Modus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастер
Тогда что ты имел в виду этой цитатой?
__________________
Инструменты сердятся, когда на них не играют
Modus вне форума   Ответить с цитированием
Старый 01.08.2009, 02:32   #11
Modus
дитя Ренессанса
 
Аватар для Modus
 
Регистрация: 29.05.2008
Сообщений: 2,346
Modus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастер
Так. Похоже, дела немного налаживаются. Сейчас я копаю в сторону реализации метамодели с использованием паттерна Proxy, чтобы реализовать только то, что мне надо. Там вроде бы всё есть для того чтобы взаимодействовать с Sql провайдером своими средствами...
__________________
Инструменты сердятся, когда на них не играют
Modus вне форума   Ответить с цитированием
Старый 14.08.2009, 10:47   #12
Modus
дитя Ренессанса
 
Аватар для Modus
 
Регистрация: 29.05.2008
Сообщений: 2,346
Modus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастер
Радость была преждевременной.

Теперь я уперся в то, что у меня никак не вызывается метод OnLoaded.

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

Буду рыться в исходниках рефлектором...
__________________
Инструменты сердятся, когда на них не играют
Modus вне форума   Ответить с цитированием
Старый 15.08.2009, 01:47   #13
Modus
дитя Ренессанса
 
Аватар для Modus
 
Регистрация: 29.05.2008
Сообщений: 2,346
Modus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастер
Похоже, тему пора переносить в мой персональный раздел, поскольку она потихоньку превращается в дневник моих плясок с бубнов вокруг Linq...

OnLoaded вызвался. Он не вызывался из-за неправильно написанного прокси и из-за отсутствия первичного ключа у таблицы.
__________________
Инструменты сердятся, когда на них не играют
Modus вне форума   Ответить с цитированием
Старый 03.01.2010, 22:51   #14
Modus
дитя Ренессанса
 
Аватар для Modus
 
Регистрация: 29.05.2008
Сообщений: 2,346
Modus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастер
Очередной подступ к вершине
http://blogs.msdn.com/mattwar/pages/linq-links.aspx
Прилагается QIToolkit - платформа для разработки LINQ-провайдеров. Объём работы вроде бы сокращается, но всё ещё кажется неподъёмным. Но раз он смог, то почему бы не...?
__________________
Инструменты сердятся, когда на них не играют
Modus вне форума   Ответить с цитированием
Старый 15.08.2010, 02:09   #15
Modus
дитя Ренессанса
 
Аватар для Modus
 
Регистрация: 29.05.2008
Сообщений: 2,346
Modus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастерModus мастер
Смог.

Не совсем по стандарту, но для внутренних целей годится.
__________________
Инструменты сердятся, когда на них не играют
Modus вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 09:09.