metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-08-04 10:14 am

DLR, IronPython, etc

Наткнувшись в процессе проектирования проги на то, что мне одновременно необходимы фичи обычного C# со статической типизацией и фичи динамических языков, полез смотреть на IronPython/DLR и тому подобное. Ну, с ходу того, что меня интересует (адекватная интеграция с DBMS) я не нашел, GUI сложнее чем MessageBox("Hello, world"); тоже и в связи с этим возник вопрос:
На кого рассчитаны все нововведения в .NET 3.5/4.0?
Всякие там LINQ to SQL/Entity Framework/Expression Trees/DLR и прочее, причем production статус этого всего совершенно непонятен, неизвестно, что отомрет, что будет использоваться, итд. Все примеры для этого, которые я видел, они, мягко выражаясь, на уровне "select * from Customers -> УРА, Я ЗНАЮ SQL".

DLR, Expression Trees - рассчитаны на дизайнеров языков, причем в проекте IronScheme от DLR отказались ("but decided to abandon this idea because the DLR branch the project used became out of sync with the trunk, and also because the DLR, according to the developers, could not support the majority of the Scheme's requirements"). Как будто и так языков мало.

В общем, это все выглядит каким-то откровенным гиковством со стороны Microsoft, похоже там всякие выпускники CS факультетов затрахали в мозг менеджмент до состояния "пусть теребят свои монады как хотят, абы нас не трогали".


Это все при том, что высокоуровневые фичи в .NET как были кривые, так и остались, типа медленной отрисовки DataGridView или over-architected мрака в System.ComponentModel.

[identity profile] metaclass.livejournal.com 2010-08-04 11:32 am (UTC)(link)
База слева. А файловая система еще левее :)

[identity profile] zamotivator.livejournal.com 2010-08-04 11:32 am (UTC)(link)
Ну а как правильно то?
Правильно не выпендриваться с маргинальной хуйнёй, которая будет в моде год-другой, а писать обычный, тупой код - SQL, Perl/Python по вкусу.

[identity profile] zamotivator.livejournal.com 2010-08-04 11:32 am (UTC)(link)
Ну, значит, приложение <- база <- файловая система.

[identity profile] w00dy.livejournal.com 2010-08-04 11:41 am (UTC)(link)
Проверка таблицы и версии при старте это необходимое зло. Вместо этого вы сейчас сверяете свои классы со схемой или что-то такое. Апдейт же этой таблицы может быть только в одном случае - когда вы накатываете апдейт на базу целиком, а в этом случае всё просто ибо он атомарен - либо прошёл, либо нет.

> Часть программы должна оставаться работоспособной вне зависимости от схемы базы.

Вот не люблю я такое. Я считаю что программа либо работает, и всё от чего она зависит находится в актуальном состоянии, либо не работает. Если у программы есть возможность привести всё в порядок (например работает с базой монопольно или ещё чего-то), она должна это сделать, если нет - есть технический специалист, номер тех.поддержки, etc.

[identity profile] w00dy.livejournal.com 2010-08-04 11:45 am (UTC)(link)
Нет, я хочу сказать что приоритетным является код по отношению к хранилищу, поэтому схема данных находиться в коде, а уже потом каким-то магическим образом ложиться на хранилище. Мне это кажется более логичным, чем востановление кода на основании схемы базы.

[identity profile] zamotivator.livejournal.com 2010-08-04 11:45 am (UTC)(link)
Вот только тут надо решить кто маргинальная хуйня - LINQ или SQL :)
Вы упоролись что ле?

[identity profile] w00dy.livejournal.com 2010-08-04 11:49 am (UTC)(link)
йопт, все взрослые европейцы читают слева->направо ;)

[identity profile] zamotivator.livejournal.com 2010-08-04 11:53 am (UTC)(link)
Да, вот причина почему SQL не любят.

[identity profile] w00dy.livejournal.com 2010-08-04 11:59 am (UTC)(link)
sql логичен с точки зрения языка (взять два яблока из коробки), но не совсем логичен с точки зрения цепочки действий.

[identity profile] asinitsyn.livejournal.com 2010-08-04 12:03 pm (UTC)(link)
>Он умеет по созданной структуре классов создать схему базы и обновлять с некоторыми ограничениями.

Увы, ОО модель программы не полностью соответствует даталогической модели. Поэтому для сколько-нибудь серьезного применения подобные ORM курят бамбук. Те, которые позволяют совместить правильную схему даннх с вашей правильной структурой классов - это хорошие, годные ORMы. Я таких не знаю.

[identity profile] zamotivator.livejournal.com 2010-08-04 12:04 pm (UTC)(link)
Простите, но linq маргинальней и прибит гвоздями к одной платформе.
Куда лучше теплый ламповый LAMP

Re: Так лучше?

[identity profile] asinitsyn.livejournal.com 2010-08-04 12:04 pm (UTC)(link)
Так влезло в синтаксис языка. А есть лучшие примеры?

Re: Так лучше?

[identity profile] zamotivator.livejournal.com 2010-08-04 12:06 pm (UTC)(link)
Я не знаю, все примеры что видел как-то... Ну не очень, скажем так.

[identity profile] asinitsyn.livejournal.com 2010-08-04 12:06 pm (UTC)(link)
Выдыхайте :)

Re: Так лучше?

[identity profile] metaclass.livejournal.com 2010-08-04 12:08 pm (UTC)(link)
Да печаль там с этими примерами.
Такое ощущение, что авторы ничего сложнее "выбрать всех сотрудников отдела" никогда в жизни не писали, и то их это фрустрировало до состояния "а не придумать/заюзать ли нам очередной ORM"

[identity profile] asinitsyn.livejournal.com 2010-08-04 12:10 pm (UTC)(link)
Они из разных миров. Для БД лучше SQL-я нет. Ну да больше и вообще ничего нет.
Юзать базу из приложения может LINQ и хорош. Но мне не нравится LINQ для SQL никак вообще. Не полетит это.

Re: Так лучше?

[identity profile] asinitsyn.livejournal.com 2010-08-04 12:11 pm (UTC)(link)
Отож. Так что этот пример достаточно хорош. Он уже есть.

Re: Так лучше?

[identity profile] metaclass.livejournal.com 2010-08-04 01:30 pm (UTC)(link)
ну шо вы все меня жыдь учите

Я знаю, кто это, я знаю историю разработки LINQ, монады, которые у него унутре, но практического смысла примерам вида "from c in Customers select c" это не придает.

Ну заменю я LINQ аналогичный запрос на сервере, если использовать LINQtoSQL - то еще заменю часть слоя маппинга между базой и приложением, но глобально это проблемы "двух мест представления предметной области" не решит

[identity profile] voidbent.livejournal.com 2010-08-04 01:47 pm (UTC)(link)
Толсто :)

Re: Так лучше?

[identity profile] metaclass.livejournal.com 2010-08-04 01:55 pm (UTC)(link)
Сейчас я как раз эту генерилку "модель->схема, код, маппинги, gui" и пишу, и пытаюсь по максимуму использовать то что уже есть готового в .NET, чтобы не повторяться.

Тут еще дело в том, что для сложных алгоритмов, не сводящихся к CRUD, мне проще SQL написать руками, а вокруг параметров и результата сгенерить обертку.

[identity profile] craneop.livejournal.com 2010-08-04 02:04 pm (UTC)(link)
C# вообще не кошерная вещь. Я к нему вообще прикасаться опасаюсь.

[identity profile] w00dy.livejournal.com 2010-08-04 03:16 pm (UTC)(link)
lamp и linq вещи абсолютно ортогональные

[identity profile] zamotivator.livejournal.com 2010-08-04 04:19 pm (UTC)(link)
Конечно.
LAMP стоит пару десятков долларов, а для запуска LINQ нужно отслюнявить пару тыщ баксов.
Это если повезёт)

[identity profile] w00dy.livejournal.com 2010-08-04 04:56 pm (UTC)(link)
это как повезёт, компания, в которой я работал, отслюнявила всего 300$ по BizSpark-у.

[identity profile] zamotivator.livejournal.com 2010-08-04 04:59 pm (UTC)(link)
Вот и нафига такое везение?

Page 2 of 3