четверг, мая 17, 2007

Знакомтесь - Jasper

В прошлом сообщении я писал о том, как попытка создания внедренного синтаксиса запросов (LINQ) повлияла на язык C#.
И вот заход с другой стороны. На этот раз, со стороны динамических языков. На конференции Mix07 Microsoft анонсировала новую технологию работы с реляционным данными под кодовым названием "Jasper".
Информации пока очень мало:
"Microsoft Codename “Jasper” is a set of components aimed at fulfilling the need for a rapid and iterative development experience for data. With Jasper, you are able to just point at a database and immediately begin coding against its data using intuitive, domain-specific data classes. No configuration and no source code generation are required. Jasper works with existing application frameworks (including ASP.NET, WinForms, and WPF) and existing, real-world databases".

Сами разработчики говорят, что Jasper ориентирован на быструю, итеративную разработку в Agile стиле.
Выглядеть это будет, как надстройка над ADO.NET Entity framework и работать с Jasper можно будет в Visual Basic 9 и Iron Python 1.1.
Работать с данными из БД при помощи Jasper будет очень просто (пример кода на VB):


Dim context = DynamicContext.CreateDynamicContext(connectionString)
For Each customer In context.Customers
Console.WriteLine("Customer " & customer.ContactName & " from " & customer.Region & " has the following orders:")
For Each order In customer.Orders
Console.WriteLine(vbTab & "Order was placed on " & order.OrderDate & "and need to be delivered by " & order.RequiredDate)
Next
Next

Неплохо, особенно "For Each order In customer.Orders". Никаких соединений, никаких команд, и ридеров, никаких ORM и DAL. Указал строку подключения, и сразу можешь работать с сущностями БД в объектных терминах. Запросы. обновления и удаления поддерживаются также. В прочем. маппингом таблиц на классы тоже можно управлять при необходимости. При этом утверждается, что все необходимые классы компилируются на лету в runtime (и тем не менее поддержка Intellisense в студии тоже гарантируется(!)).
Вторая фишка Jasper - это улучшенный UI биндинuнг. Обещают поддержку ASP.NET WinForms и, конечно, WPF.
В общем выглядит Jasper весьма аппетитно.
В презентации разработчиков Jasper Samuel Druker и Shyam Pather на Mix07 (формат Silverlight) есть эффектная демонстрация возможностей Jasper в IronPython shell.
Еще ссылки по теме:
Слайды к презентации Jasper (pdf 5.5M)
CTP release Jasper (уже можно пробовать!)
Блоги разработчиков: Carl Perry, Shyam Pather

6 комментариев:

NikSoft комментирует...

Да, начинается золотой век не только для русского программиста, но и для .NET разработчиков.

MatFiz комментирует...

Ну и чего хорошего в такой динамической привязке к БД?
Из минусов:

- долгий старт приложения
- отсутствие строгой типизации ==> проблемы с интеллисенсом, рефакторингом, больше ошибок в run-time.
- непроверяемые компилятором соглашения именования (GetEmail)
- наконец, проблемы с работой в C# из-за необходимости поддержки late binding, про которую говорят докладчики

В то же время достаточно просто воспользоваться чем-то вроде SqlMetal, чтобы получить классы для работы с БД - и все перечисленные минусы пропадают

Sergey Rozovik комментирует...

to MatFiz
>- наконец, проблемы с работой в C# из-за необходимости поддержки late binding, про которую говорят докладчики
Насколько я понял, Jasper для C# не поддерживается.
Хотя вопросов много. Я, например, так и не понял пока во что компилируется код на VB, типа, context.Orders customer.Orders, если утверждается что все эти типы содаются динамически в runtime...

MatFiz комментирует...

Дело не в Jasper-е, а в C#.
Все за счет late binding работает.
При компиляции VB, насколько я понимаю, вставляются вызовы методов через reflection.
В шарпе для этого стандартного синтаксиса нет и пришлось бы писать всякие myObject.GetType().InvokeMethod(...)

MatFiz комментирует...

Вообще, я думаю, что поддержку в шарп введут как-нибудь так:
сделают секцию
late
{
// Тут доступен удобный синтаксис для late binding
myObject.SayHello("World");
}

Yaroslav комментирует...

К сожалению нет безлимитки, чтобы скачать оркас, поэтому попробовать Jasper не удастся по крайней мере пока. Отсюда вопрос: вот в блоге Перри примеры по вычитыванию из базы. Там все ясно, удобно, быстро, круто :-). А как обстоит дело с транзакционными операциями? Т.е. обновить группу объектов к примеру?