ORM

Dec. 13th, 2008 01:25 am
metaclass: (Default)
[personal profile] metaclass
Чтение споров про ORM приводит меня в дикое уныние. Такое ощущение, что все мегагуру-разработчики языков программирования никогда сами не писали DB-centric applications и поэтому ни один язык общего назначения для ORM не подходит в принципе.
Единственное, что мне приходит в голову в этом плане - это язык, у которого докомпиляция бы производилась уже в рунтайме, с метаданными из живой базы. Или же чтобы код автоматически генерился и компилировался при разработке тоже из метаданных базы, а в рунтайме производилось сравнение метаданных на которых прога компилировалась и на которых ее запускают.
На данный момент из похожего - разве что Nemerle с его метапрограммированием на макросах, но это ж экспериментальное шыло, без развитой userbase.

Date: 2008-12-13 06:48 am (UTC)
From: [identity profile] inhate.livejournal.com
ABAP ? :)

Date: 2008-12-13 07:44 am (UTC)
From: [identity profile] gds.livejournal.com
разумные моменты в тех спорах, которые я читал, касались вопроса "нафига orm?", а не "подходит ли язык для orm?". orm можно на любом ОО-языке изобразить.

А кроме Nemerle есть ещё одно известное мне "конкретное решение" -- плохо, что только для postresql+ocaml -- pgocaml.

Date: 2008-12-13 08:44 am (UTC)
From: [identity profile] samurai-within.livejournal.com
PowerBuilder ? :) Оно с базой чуть ли не срощеное. Правда увы проприертарщина и вендовщина

Date: 2008-12-13 09:20 am (UTC)
From: [identity profile] max-posedon.livejournal.com
"Единственное, что мне приходит в голову в этом плане - это язык, у которого докомпиляция бы производилась уже в рунтайме, с метаданными из живой базы."

#!/usr/bin/ruby

require 'active_record'
ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:host => "localhost",
:database => "mydb",
:username => "root"
)

# предположим что users(id, nickname, email);
class User < ActiveRecord::Base
end

User.find_by_nickname('metaclass').email
=> "metaclass@some.domain.com"

Так что, зря ты так про всех разработчиков, есть и вменяемые. Да, для нормального юзабельного ORM, нужен язык с !широчайшей поддержкой метапрограммирования! -> таких я знаю 2: Lisp и Ruby (Nemerle я в глаза не видел), причём ruby есть и на .Net-е в виде IronRuby, так что пользуйтесь, а не нойте.

Date: 2008-12-13 02:00 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Руби вроде поддерживает динамическое изменение структуры классов в рунтайме, а не метапрограммирование. Т.е., я не очень уверен в том, что у него система типов кошерная.

Date: 2008-12-13 05:46 pm (UTC)
From: [identity profile] max-posedon.livejournal.com
А ты взял бы и проверил. (Там именно метапрограммирование).

Date: 2008-12-13 12:12 pm (UTC)
From: [identity profile] tonal.myopenid.com (from livejournal.com)
На Python-не ORM пишется не задумываясь. :)
Ну и есть кучка готовых под любой вкус.

Date: 2008-12-13 04:42 pm (UTC)
From: [identity profile] slonopotamus.livejournal.com
Нафига SQL? :) Он чужероден любому языку программирования. Посматриваю на happs. Я не хочу делать 'select count(*) from table where field > 5'. Я хочу Table.filter(field > 5).size()

Date: 2008-12-13 05:48 pm (UTC)
From: [identity profile] max-posedon.livejournal.com
в Ruby (используя activerecord) это Table.count(:conditions => ["field > ?", 5])

Date: 2008-12-13 05:57 pm (UTC)
From: [identity profile] slonopotamus.livejournal.com
Не, не то. Условие для фильтрации - нормальная лямбда. Объект, получающийся после фильтрации - полноценная коллекция. По которой можно итерироваться, у которой можно спрашивать размер. Зачем для работы с таблицой и работы со списком tuple'ов иметь разный api? Пусть будет одинаковым.

Date: 2008-12-13 09:02 pm (UTC)
From: [identity profile] gds.livejournal.com
ну придумайте, кто мешает; а если будет так, что условием _действительно_ сможет служить "нормальная лямбда", и всё это будет эффективно работать (хотя бы транслироваться в эффективный sql) -- памятник поставят, и даже не потомки, а современники.

Date: 2008-12-13 09:34 pm (UTC)
From: [identity profile] max-posedon.livejournal.com
А можете привести маленький test case, чего ИМЕННО вы бы хотеле на простых примерах, что-то у меня ощущения, что вам пора искать рабочих, на паятник 37signals .)
Я бы попробывал доказать, что ruby+activrecord проходит этот тест.

Date: 2008-12-14 10:38 am (UTC)
From: [identity profile] gds.livejournal.com
интересует трансляция произвольных чистых функций в sql, без client-side фильтрации. Так как к чистым лямбдам относится и комбинатор для построения рекурсии, сюда же относятся произвольные рекурсивные функции. Думаю, теперь пример не особо нужен.
Однако могу на слово поверить, что упомянутая комбинация проходит тест посредством в том числе фильтрации выборки на клиенте после получения какого-либо результата от БД.

Date: 2008-12-13 09:32 pm (UTC)
From: [identity profile] max-posedon.livejournal.com
1. Table.count(:conditions => ["field >?", 5]).size полный аналог того что у вас:
вместо hash-а тут может быть ляvбда(proc-объект в ruby) которая должна вернуть хэш
и да, резулльиатом Table.find(:conditions => ["field > ?", 5]) является коллекция.
В общем если интересно, можете почернуть документацию по activerecord, там действительно всё очень вкусно, `лямдануто` и отлично.

2. а это можно использывать в любом haskell app? или чёткая привязка к happs?


Date: 2008-12-14 08:25 am (UTC)
From: [identity profile] slonopotamus.livejournal.com
1. Нате вам список чисел: [1..10]. Отфильтруйте те, которые больше 5 и посчитайте размер. После чего возьмите таблицу с полем с числами от 1 до 10. Отфильтруйте те, которые больше 5 и посчитайте размер. Подумайте, почему вам приходится использовать настолько разный api.

2. Я пока не смог понять. У них совершенно нет документации, а посможив это на моё чисто теоретическое знание хаскела получается не очень внятно. Думаю что к веб-части оно никак не привязано.

Date: 2008-12-14 10:55 am (UTC)
From: [identity profile] metaclass.livejournal.com
Это client-side?
Вообще идея хорошая, конечно, но генерить из этого серверные запросы было бы еще веселее. В Микрософт для этих целей делали Linq2SQL, но похоже, они его загубили в итоге.

Date: 2008-12-13 09:00 pm (UTC)
From: [identity profile] http://users.livejournal.com/renny_/
A Entity Framework + LINQ чем понравились?

Date: 2008-12-14 11:10 am (UTC)
From: [identity profile] metaclass.livejournal.com
Микрософт утомит своим бесконечным прогрессом. Я на LINQ еще перейти никак не дойду - сплошной чистый ADO и логика в хранимых процедурах и запросах, а они уже Linq2SQL выкинуть успели и Entity Framework этот припилить. Не хочется инвестировать время в изучение технологий, которые будут выкинуты. Я так уже лет 10 их мегатехнологии успешно игнорирую - достаточно на пару лет задержать переход на новые версии, и половина выдуманного просто исчезнет, будучи замененной на что нибудь новое.

Date: 2008-12-15 07:42 am (UTC)
From: [identity profile] http://users.livejournal.com/renny_/
Это зря. EF + LINQ (не путать с LINQ2SQL) — аццкая штука. Всякие NHibernate'ы тусуются в стороне :)

Date: 2008-12-21 05:51 am (UTC)
From: [identity profile] http://users.livejournal.com/_zerg/
BLToolkit? Это не ORM, но примерно вот это "у которого докомпиляция бы производилась уже в рунтайме, с метаданными из живой базы."

Первое впечатление

Date: 2009-01-14 07:35 am (UTC)
From: [identity profile] kmmbvnr.livejournal.com
Какой-то ковбойский проект. Документации минимум. Из активного коммьюнити тока разработчки.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 7th, 2025 04:57 am
Powered by Dreamwidth Studios