|
Цифровые технологии, программирование и сайтостроительство Полупрофессиональный подраздел. Подробное описание раздела находится в прикреплённой теме. |
|
Опции темы |
28.07.2009, 02:21 | #1 |
дитя Ренессанса
Регистрация: 29.05.2008
Сообщений: 2,346
|
Linq
Полтора года назад я начал разрабатывать фреймворк Botan, включающий в себя ORM и генератор форм. Сейчас он в несколько доработанном виде внедрен в реальную практику, и я, удовлетворив свои творческие амбиции и наигравшись в красивую архитектуру, решил больше не выпендриваться, и освоить-таки стандартный Linq2Sql. Я и раньше бегло изучал этот ORM, и он казался мне очень неплохим.
Через полчаса после попытки сделать на нём пробное приложение радость удалилась далеко и надолго. Похоже, что на трансляции лямбда-выражений в SQL-запросы его прелести заканчиваются. То, что для обработки изменений значений свойств он генерирует partial-методы, воспроизводится за полчаса: большая трудоёмкость только в создании обработчика лямбда-выражений. Причём большая настолько, что делать это самому - сущее безумие. Я давно уже думал о том, чтобы прикрутить к Botan класс SqlProvider, который преобразует лямбда-выражения в SQL-запросы в Linq2Sql, но пока не придумал как. Похоже, что придётся обойтись без этой доли прогрессивного синтаксического сахара и сидеть на старом добром паттерне Query object. Вот уж воистину, свои велосипеды ближе к телу. При всём уважении к Microsoft.
__________________
Инструменты сердятся, когда на них не играют |
28.07.2009, 02:38 | #2 |
take a look
Регистрация: 03.03.2008
Сообщений: 2,119
|
неправильно ты дядя Фёдор бутерброд ешь...
|
28.07.2009, 07:05 | #3 |
Мохнатый Красношёрстный
Регистрация: 01.04.2006
Адрес: Красноярск
Сообщений: 2,476
|
Modus, а если взять заведомо упрощённый синтаксис. Сходу могу порекомендовать синтаксис @ функций от LotusNotes. @Функция(Параметр1; Параметр2; Параметр3;..)
|
28.07.2009, 10:35 | #4 |
дитя Ренессанса
Регистрация: 29.05.2008
Сообщений: 2,346
|
В LotusNotes задача языковой интеграции не решена. По идее, фишка Linq как раз в том, что запросы к базе пишутся прямо в коде на C# со всеми примуществами строгой типизацией и т.п. После работы в Axapta я относился к Linq в духе "давно пора".
А так - что в связке .NET + SQL, что в Lotus Notes, императивная часть и функцональная пишутся на разных языках, которые как-то друг с другом взаимодействуют. Я хотел отойти от методов 2005 года, перейти на более современные технологии, но столкнулся с тем, что они нифига не удобнее. Макинсон, а как правильно?
__________________
Инструменты сердятся, когда на них не играют |
28.07.2009, 10:42 | #5 |
Мохнатый Красношёрстный
Регистрация: 01.04.2006
Адрес: Красноярск
Сообщений: 2,476
|
Да, не решена, только это глюк не синтаксиса, а среды.
Я этот синтаксис потому предложил, что он однозначный, парсер писать -- плёвое дело. Остаётся только словарь определить. Ну и изначально заложить расширяемость. |
28.07.2009, 11:06 | #6 |
дитя Ренессанса
Регистрация: 29.05.2008
Сообщений: 2,346
|
Парсер там в принципе не нужен. Лямбда-выражения в C# уже приходят в виде дерева. Нужно по этому дереву построить запрос SQL. Я не владею математическим аппаратом преобразования одного дерева в другое, да и представление лямбда-выражений в виде дерева простотой не отличается. DevExpress'овские фильтры я в свою объектную модель запроса уже преобразую, но кривовато, работает только в простых случаях (для реальной практики годится, потому что сложные случаи маловероятны).
Кстати, Макинсон, очень рад тебя видеть тут в добром здравии.
__________________
Инструменты сердятся, когда на них не играют |
28.07.2009, 11:35 | #7 |
Мохнатый Красношёрстный
Регистрация: 01.04.2006
Адрес: Красноярск
Сообщений: 2,476
|
Формат дерева покурить где можно? Может тоже где заюзаю.
|
28.07.2009, 14:07 | #8 |
дитя Ренессанса
Регистрация: 29.05.2008
Сообщений: 2,346
|
Ничего лучше чем http://blogs.msdn.com/charlie/archiv...ee-basics.aspx не нагуглил.
__________________
Инструменты сердятся, когда на них не играют |
28.07.2009, 16:44 | #9 |
take a look
Регистрация: 03.03.2008
Сообщений: 2,119
|
Спасибо.
Я не знаток этой тематики... |
28.07.2009, 17:49 | #10 |
дитя Ренессанса
Регистрация: 29.05.2008
Сообщений: 2,346
|
Тогда что ты имел в виду этой цитатой?
__________________
Инструменты сердятся, когда на них не играют |
01.08.2009, 02:32 | #11 |
дитя Ренессанса
Регистрация: 29.05.2008
Сообщений: 2,346
|
Так. Похоже, дела немного налаживаются. Сейчас я копаю в сторону реализации метамодели с использованием паттерна Proxy, чтобы реализовать только то, что мне надо. Там вроде бы всё есть для того чтобы взаимодействовать с Sql провайдером своими средствами...
__________________
Инструменты сердятся, когда на них не играют |
14.08.2009, 10:47 | #12 |
дитя Ренессанса
Регистрация: 29.05.2008
Сообщений: 2,346
|
Радость была преждевременной.
Теперь я уперся в то, что у меня никак не вызывается метод OnLoaded. Я создаю класс, который заполняется автоматически сложным запросом, такой таблицы в базе нет. Теоретически, Linq должен автоматически найти этот метод и вызвать его после привязки, но увы. Не помогает ни создание нового типа контекста, ни метамодель. Буду рыться в исходниках рефлектором...
__________________
Инструменты сердятся, когда на них не играют |
15.08.2009, 01:47 | #13 |
дитя Ренессанса
Регистрация: 29.05.2008
Сообщений: 2,346
|
Похоже, тему пора переносить в мой персональный раздел, поскольку она потихоньку превращается в дневник моих плясок с бубнов вокруг Linq...
OnLoaded вызвался. Он не вызывался из-за неправильно написанного прокси и из-за отсутствия первичного ключа у таблицы.
__________________
Инструменты сердятся, когда на них не играют |
03.01.2010, 22:51 | #14 |
дитя Ренессанса
Регистрация: 29.05.2008
Сообщений: 2,346
|
Очередной подступ к вершине
http://blogs.msdn.com/mattwar/pages/linq-links.aspx Прилагается QIToolkit - платформа для разработки LINQ-провайдеров. Объём работы вроде бы сокращается, но всё ещё кажется неподъёмным. Но раз он смог, то почему бы не...?
__________________
Инструменты сердятся, когда на них не играют |
15.08.2010, 02:09 | #15 |
дитя Ренессанса
Регистрация: 29.05.2008
Сообщений: 2,346
|
Смог.
Не совсем по стандарту, но для внутренних целей годится.
__________________
Инструменты сердятся, когда на них не играют |