Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Разбор YAML 
:(
    Опции темы
aktuba
Дата 7.6.2012, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Цитата(source777 @  7.6.2012,  13:15 Найти цитируемый пост)
Да нет в роутинге Sinatra никаких ограничений, делай любой роут какой захочешь:


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

Цитата(source777 @  7.6.2012,  13:15 Найти цитируемый пост)
Да не всё так страшно, в рельсах только запуск приложения подтормаживает. В остальном всё ok. А бенчмарки - они как всегда забывают, что реальные приложения упираются прежде всего в кривые алгоритмы, медленные выборки из БД и т.п., по сути влияние фреймворка стоит во втором десятке факторов, влияющих на производительность.


Согласен. Но пока все-равно не возникло желание юзать рельсы ).

Цитата(source777 @  7.6.2012,  13:15 Найти цитируемый пост)
Kohana - это ведь один из клонов Rails под PHP   


Путаешь с CakePHP, похоже. Kohana ни капли на руби не похожа ;)

Цитата(source777 @  7.6.2012,  13:15 Найти цитируемый пост)
Это как? Гем не подключен по умолчанию?   


Имел в виду генераторы padrino. Datamapper, sequel и пр. он-же поддерживает. ;)

Цитата(source777 @  7.6.2012,  13:15 Найти цитируемый пост)
Кто-то заставляет тебя их использовать?


Не поверишь - документация. Я, например, не нашел описания структуры приложения. Подскажешь где посмотреть?

Цитата(source777 @  7.6.2012,  13:15 Найти цитируемый пост)
Очень зря. Обходить best practices стороной из-за того что под PHP кривая реализация попалась весьма странно, под PHP нормальные реализации вообще редкость... Помню ActiveRecord в Code Igniter, так там от этого паттерна ничего кроме названия нет.


С каких пор попытка превратить реляционную базу в объектную - best practices? Если я работаю с реляционной базой, мне проще написать нормальный, более-менее оптимизированный запрос, а не использовать кучу оберток над базой только для того, чтобы написать тот же запрос, но использую сторонний синтаксис. Я многих просил показать преимущества orm, например. Особенно, если база денормализована. Поможешь понять? )



--------------------
user posted image
PM MAIL WWW Skype   Вверх
source777
Дата 7.6.2012, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(aktuba @  7.6.2012,  14:58 Найти цитируемый пост)
 Я-то говорю про другое - про простоту использования, удобство написания роутов и пр.

Ну в плане удобства нет особой разницы с примером, который ты привёл из Kohana. Различие, не считая синтаксиса, только в том в Sinatra роутинг не отделён от обработки, но это часть идеологии. Хочется изолированный роутинг - welcome to Rails.

Цитата(aktuba @  7.6.2012,  14:58 Найти цитируемый пост)
Путаешь с CakePHP, похоже. Kohana ни капли на руби не похожа ;)

Да, их там столько что всех не упомнишь... На Ruby они все не похожи, т.к. у PHP синтаксис гораздо менее изящен. CakePHP - самый древний кажись.. копия ещё с Rails 1. Но есть же копии и с более свежих версий, типа Yii, Symfony, etc. А Kohana - это CI с нормальным MVC? 

Цитата(aktuba @  7.6.2012,  14:58 Найти цитируемый пост)
Не поверишь - документация. Я, например, не нашел описания структуры приложения. 

Ну для структуры приложения нужно только 1 раз 1 генератор запустить. В этом то ничего страшного нет. Просто выбор гемов, которые будут по умолчанию. Никто потом тебя не будет ограничивать только ими. А ненужные по твоему мнению компоненты можно пропустить передав none генератору.

Цитата(aktuba @  7.6.2012,  14:58 Найти цитируемый пост)
С каких пор попытка превратить реляционную базу в объектную - best practices?

Базу никто не трогает. Best practices -  это не нарушать целостность концепции. В ООП программе всё есть объект, чтобы получить объекты на основе данных в БД и существует ORM. Плюс не забывай, что ActiveRecord - это самый простой ORM.  
Другой подход - работать с БД через хранимые процедуры и триггеры. Оба способа - best practices, всё что между ними (например, SQL-запросы в контроллере или в представлении) - плохой дизайн.

Цитата(aktuba @  7.6.2012,  14:58 Найти цитируемый пост)
мне проще написать нормальный, более-менее оптимизированный запрос, а не использовать кучу оберток над базой только для того, чтобы написать тот же запрос, но использую сторонний синтаксис

Обертки в любом случае понадобятся, если это не единичные запросы. Иначе опечатки, шредингбаги и sql-инъекции будут в изобилии. Т.е. ты либо используешь готовую, хорошо протестированную библиотеку, либо просто напишешь свой mapper, разработку и отладку которого под конкретный проект должен будет оплатить заказчик.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
aktuba
Дата 7.6.2012, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Цитата(source777 @  7.6.2012,  18:47 Найти цитируемый пост)
Хочется изолированный роутинг - welcome to Rails.

Ну теперь я хотя-бы знаю, почему говорят руби - подразумевают рельсы ))

Цитата(source777 @  7.6.2012,  18:47 Найти цитируемый пост)
А Kohana - это CI с нормальным MVC? 

Это 2-я версия такая была. 3-ка совсем другая, значительно приятнее и удобнее.

Цитата(source777 @  7.6.2012,  18:47 Найти цитируемый пост)
Ну для структуры приложения нужно только 1 раз 1 генератор запустить.

Ну вот видишь, теперь и ты заставляешь генератором пользоваться ))). А я не хочу. Серьезно.

Цитата(source777 @  7.6.2012,  18:47 Найти цитируемый пост)
Best practices -  это не нарушать целостность концепции.

Спорное утверждение, на мой скромный взгляд.

Цитата(source777 @  7.6.2012,  18:47 Найти цитируемый пост)
В ООП программе всё есть объект, чтобы получить объекты на основе данных в БД и существует ORM.

В том-то и суть, что данные - это не программа. И совсем не факт, что данные в виде объектов могут быть, в каких-то случаях, удобнее плоских данных. Да и вообще, это полностью проблема модели, в каком виде возвращать данные, т.к. сами данные могут быть где угодно, помимо локального хранения. Вплоть до генерации этих самых данных. Мне вот намного удобнее работать с данными как с массивом, т.е. в плоском виде.

Цитата(source777 @  7.6.2012,  18:47 Найти цитируемый пост)
Другой подход - работать с БД через хранимые процедуры и триггеры. Оба способа - best practices, всё что между ними (например, SQL-запросы в контроллере или в представлении) - плохой дизайн.

Ну я не говорил про запросы в контроллерах и, тем более, во вьюхах ). Я говорил про то, что переводить данные из одного типа в другой только для того, чтобы прочитать их - не лучший подход.

Цитата(source777 @  7.6.2012,  18:47 Найти цитируемый пост)
Обертки в любом случае понадобятся, если это не единичные запросы. Иначе опечатки, шредингбаги и sql-инъекции будут в изобилии. Т.е. ты либо используешь готовую, хорошо протестированную библиотеку, либо просто напишешь свой mapper, разработку и отладку которого под конкретный проект должен будет оплатить заказчик. 

Тоже не факт. Пример - pdo в php. Сам по себе исключает большинство возможных проблем, не создавая дополнительных сущностей и оверхеда. Кроме того, обертки бывают разные. ORM - это не обертка, это именно конвертер методов в запрос и результатов в объекты. И оверхед делает совсем не слабый, по моему опыту.



--------------------
user posted image
PM MAIL WWW Skype   Вверх
source777
Дата 7.6.2012, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(aktuba @  7.6.2012,  20:58 Найти цитируемый пост)
Ну теперь я хотя-бы знаю, почему говорят руби - подразумевают рельсы ))

Ну это только в части веб-разработки. По сути Rails - основной веб-фреймворк. Остальные стараются продвинуть другие идеологии, поэтому взять веб-фреймворк на Ruby, но не Rails, и пытаться работать на нём как в Rails - выглядит странно.

Цитата(aktuba @  7.6.2012,  20:58 Найти цитируемый пост)
Ну вот видишь, теперь и ты заставляешь генератором пользоваться ))). А я не хочу. Серьезно.

Так я думал, что ты изначально говорил про генераторы контроллеров, моделей, тестов и т.д., а создание приложения - это уже даже не ассоциируется с генератором, хотя формально им является. Зачем этого избегать? 
Ведь в том же Kohana ты делаешь тоже самое, только BDSM способом: зайти на сайт, скачать, распаковать, начать работу в директории application. В данном же случае генератор просто сразу создаёт аналог директории application.

Цитата(aktuba @  7.6.2012,  20:58 Найти цитируемый пост)
Да и вообще, это полностью проблема модели, в каком виде возвращать данные

Проблема модели - в каком виде получать данные, а возвращать надо придерживаясь принятого в проекте API модели. Для MVC-проектов - это в 99% проектов будет объект.
Можно, конечно, уходить в андеграунд и плевать на общепринятые концепции, но это для случая когда программирование выступает в роли способа самовыражения или хобби, если же программирование выступает в роли ремесла, то плыть против течения - тупо не выгодно.

Цитата(aktuba @  7.6.2012,  20:58 Найти цитируемый пост)
Ну я не говорил про запросы в контроллерах и, тем более, во вьюхах ).

Ну ты мне не оставил других вариантов... Ведь если ты получаешь данные в модели, то ты либо используешь ORM... либо не используешь ООП, что для Ruby нонсенс. 

Цитата(aktuba @  7.6.2012,  20:58 Найти цитируемый пост)
 И оверхед делает совсем не слабый, по моему опыту.

Преждевременная оптимизация - корень всех зол. Ну сэкономишь ты пару мс в среднем на страницу, а кода в моделях будет в разы больше, причём большая часть будет в строковом представлении. Ничего хорошего тут нет. Особенно если ты работаешь не в гордом одиночестве.
Я сам иногда использую SQL-запросы, но только когда это оправдано. Обычно получается не более 1 raw-SQL запроса на 1000 LOC проекта.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
aktuba
Дата 8.6.2012, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Цитата(source777 @  7.6.2012,  23:01 Найти цитируемый пост)
Ну это только в части веб-разработки. По сути Rails - основной веб-фреймворк. Остальные стараются продвинуть другие идеологии, поэтому взять веб-фреймворк на Ruby, но не Rails, и пытаться работать на нём как в Rails - выглядит странно.

Ну так я не хочу как в rails, хочу так, как мне удобно. Пусть и похоже, но это разные вещи.

Цитата(source777 @  7.6.2012,  23:01 Найти цитируемый пост)
Так я думал, что ты изначально говорил про генераторы контроллеров, моделей, тестов и т.д., а создание приложения - это уже даже не ассоциируется с генератором, хотя формально им является. Зачем этого избегать? 

По нескольким причинам. Начиная с того, что я недолюбливаю *nix (но и без него никуда, к сожалению) и заканчивая тем, что генератор делает что-то помимо меня, заставляет лезть в консоль и пр. Не поверишь, скорее всего, но до руби у меня никогда не было необходимости лезть в консоль. Хотя опыт работы в вебе достаточно большой.

Цитата(source777 @  7.6.2012,  23:01 Найти цитируемый пост)
Ведь в том же Kohana ты делаешь тоже самое, только BDSM способом: зайти на сайт, скачать, распаковать, начать работу в директории application. В данном же случае генератор просто сразу создаёт аналог директории application.

Верно. Но делается это с помощью браузера и ftp-клиента. Все! И это правильно, на мой взгляд...

Цитата(source777 @  7.6.2012,  23:01 Найти цитируемый пост)
Проблема модели - в каком виде получать данные, а возвращать надо придерживаясь принятого в проекте API модели.

Не-не-не... Взаимосвязь контроллер-модель - отдельный вопрос. Я сторонник тонких моделей. А вот возвращать надо исходя из api приложения, а не платформы. Где-то, объектная модель будет только на пользу, а где-то только во вред. Второй случай - большие объемы данных, зависимость от скорости обработки и т.п.

Цитата(source777 @  7.6.2012,  23:01 Найти цитируемый пост)
Для MVC-проектов - это в 99% проектов будет объект.

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

Цитата(source777 @  7.6.2012,  23:01 Найти цитируемый пост)
Можно, конечно, уходить в андеграунд и плевать на общепринятые концепции, но это для случая когда программирование выступает в роли способа самовыражения или хобби, если же программирование выступает в роли ремесла, то плыть против течения - тупо не выгодно.

Выгодно - когда удобно, а не модно, верно? Простой пример - на работе делаем довольно крупные и нагруженные проекты на php. Так вот в коде нет НИ ОДНОГО ОБЪЕКТА. Вообще. Только статичные классы. И я тоже плевался, когда впервые увидел. Но проанализировав плюсы и минусы могу смело сказать, что это оправдано и удобно (хотя и не везде в проекте). Так и тут - я не вижу никаких плюсов в orm, не вижу удобств - так зачем оно мне?

Цитата(source777 @  7.6.2012,  23:01 Найти цитируемый пост)
Ну ты мне не оставил других вариантов... Ведь если ты получаешь данные в модели, то ты либо используешь ORM... либо не используешь ООП, что для Ruby нонсенс. 

Стоп-стоп-стоп! С чего бы это получение данных в модели сразу становится завязанным на orm? o_O Не понимаю данной логики. Еще раз - данные и организация кода - это совсем разные вещи. И как не извращайся (при использовании mysql, например) - данные всегда будут в плоском виде. А код - ООП. Что не так?

Цитата(source777 @  7.6.2012,  23:01 Найти цитируемый пост)
Преждевременная оптимизация - корень всех зол.

Аааабсолютно верно! Но ты же не пишешь сначала плохой код, а потом переписываешь на нормальный? Так и тут - если известны проблемы, то они обходятся сразу и сложно это считать оптимизацией. Простой пример из мира php: если в for использовать count - цикл выполняется, примерно, на 50% дольше. Зная это, вряд ли будешь использовать count в for, верно? Разве-ж это оптимизация? )

Цитата(source777 @  7.6.2012,  23:01 Найти цитируемый пост)
Ну сэкономишь ты пару мс в среднем на страницу, а кода в моделях будет в разы больше, причём большая часть будет в строковом представлении. Ничего хорошего тут нет. Особенно если ты работаешь не в гордом одиночестве.

А вот это как-раз зло. Экономия пары мс ничего не значит, но экономия сотен мс на страницу значит очень много. И еще раз повторю - кода в модели у меня будет довольно мало (в основном, сами запросы), а вот в контроллерах будет достаточно.

Цитата(source777 @  7.6.2012,  23:01 Найти цитируемый пост)
Я сам иногда использую SQL-запросы, но только когда это оправдано.

Значит ты сможешь дать внятные примеры, когда это НЕ оправдано? Правда, ведь? )



--------------------
user posted image
PM MAIL WWW Skype   Вверх
aktuba
Дата 8.6.2012, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Еще вопрос, если можно. Что в данном коде не так?
Код

config.map do |name, options|
      unless config[name][:path]
        raise(InvalidConfig, "Path not found on route: #{name}")
      end

      params = []
      options.map do |key, value|
        unless key.kind_of?(Symbol)
          raise(InvalidConfig, "Route params not valid: #{key.to_s}")
        end
        params[name][key] = value #то, что я хочу сделать, но не получается (
      end
    end


Это сообщение отредактировал(а) aktuba - 8.6.2012, 01:14


--------------------
user posted image
PM MAIL WWW Skype   Вверх
source777
Дата 9.6.2012, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(aktuba @  8.6.2012,  00:04 Найти цитируемый пост)
Не поверишь, скорее всего, но до руби у меня никогда не было необходимости лезть в консоль. Хотя опыт работы в вебе достаточно большой.

Ну т.е. другими словами тебя просто поработила привычка работать мышкой. В таком случае ты можешь поставить IDE типа Rubymine и продолжать работать как привык, ища нужный пункт в меню, либо осваивать прелести консоли. Просто в винде консоль - дохлая, если без power shell то вообще ни о чём. А у пользователей MacOS X и GNU/Linux консоль - это основное рабочее окно.

Цитата(aktuba @  8.6.2012,  00:04 Найти цитируемый пост)
Верно. Но делается это с помощью браузера и ftp-клиента. Все! И это правильно, на мой взгляд...

Ну так неудобно ведь! Не говоря уж о том, что такие проекты предоставляют только 1 вариант начального приложения. Тогда как проекты с генераторами начального приложения дают тебе гораздо больше свободы выбора.


Цитата(aktuba @  8.6.2012,  00:04 Найти цитируемый пост)
А вот это уже заблуждение. Точнее - привычки разработчиков.

Ну правильно, привычка разработчиков. А заблуждение то где? Ведь это в первую очередь привычка разработчиков всех популярных веб-фреймворков.

Цитата(aktuba @  8.6.2012,  00:04 Найти цитируемый пост)
Выгодно - когда удобно, а не модно, верно? Простой пример - на работе делаем довольно крупные и нагруженные проекты на php. Так вот в коде нет НИ ОДНОГО ОБЪЕКТА. 

Ну вот ты и сознался, что не используешь ООП. Нравится - пожалуйста, но это на PHP, где нормальной поддержки ООП никогда не было, и даже stdlib полностью в процедурном стиле. А на Ruby проекты без ООП если и существуют, то в пренебрежимо малом количестве. Основное заблуждение тут в том, что объекты что-то замедлили бы в вашем проекте, это не более чем самооправдание за плохой дизайн. Я видел много крупных, нагруженных проектов, но ни в одном из них создание объектов или ORM не были узким местом. Проблемы под нагрузкой у всех выплывают, но они совсем в другом.


Цитата(aktuba @  8.6.2012,  00:04 Найти цитируемый пост)
Стоп-стоп-стоп! С чего бы это получение данных в модели сразу становится завязанным на orm? o_O Не понимаю данной логики. Еще раз - данные и организация кода - это совсем разные вещи.

ORM - это по сути получение данных модели в изолированном классе. Если для каждой модели есть отдельный класс или экземпляр класса(O), в котором сосредоточена работа(M) с внешним реляционным хранилищем данных®, то имеет место ORM. Дальше уже вариации - самописный или библиотечный. Другими словами, если ты не используешь ActiveRecord, то это ещё не значит, что ты не используешь ORM. Посмотри, например, Sequel, совсем не похоже на ActiveRecord, но тоже ORM.

Цитата(aktuba @  8.6.2012,  00:04 Найти цитируемый пост)
Но ты же не пишешь сначала плохой код, а потом переписываешь на нормальный?

Хм, критерии нормальности не всегда очевидны, точнее они почти всегда субъективны, причём даже эта субъективность меняется со временем. В самом по себе в ORM нет ни одной объективной, широко известной проблемы.
Могут быть проблемы с твоей т.з., но раз есть миллионы профессиональных разработчиков, которые не разделяют эту т.з., значит это сугубо субъективные проблемы. Понятно, что эгоцентризм - неотъемлемая часть человеческой природы, но иногда и по сторонам оглядеться бывает полезно.

Цитата(aktuba @  8.6.2012,  00:04 Найти цитируемый пост)
Экономия пары мс ничего не значит, но экономия сотен мс на страницу значит очень много.

Ну сотни мс - это хорошо, но фишка то в том, что отказом от ORM и 10 мс хрен выиграешь. Возможно тебе просто попадались случаи неумелого использования ORM, когда вместо одного запроса генерировалось N*(N+1). Но это проблема кривых рук, а не ORM. А личное представление об ORM из-за этого получилось искажённым.

Цитата(aktuba @  8.6.2012,  00:04 Найти цитируемый пост)
Значит ты сможешь дать внятные примеры, когда это НЕ оправдано? Правда, ведь? )

По умолчанию это не оправдано. Писать "SELECT * FROM my_app_db.topics WHERE (deleted_at IS NULL) LIMIT 10" вместо Topic.active.limit(10) нет никакого смысла. Если у тебя поменяются критерии активности топиков, то достаточно будет изменить одну строчку scope :active в модели, а не переписывать каждый раз все запросы на выборку топиков по всему проекту. Другой плюс, что запись Topic.active.limit(10) короче и читабельнее, т.к. не требует переключения контекста на другой ЯП (SQL - это ведь тоже ЯП, хоть и DSL). Проще говоря, нужна очень весомая причина, чтобы впихнуть строчку на SQL в код на другом языке.
А оправдано только в тех случаях, когда абстракция ORM затрудняет написание оптимального запроса, что бывает весьма редко по факту. И даже в таких случаях предпочтительнее написать хранимую процедуру, чтобы не смешивать SQL-запросы и код в одну кучу.

Добавлено через 2 минуты и 57 секунд
Цитата(aktuba @  8.6.2012,  01:13 Найти цитируемый пост)
Что в данном коде не так?

В Ruby нет ассоциативных массивов, как в пыхе. В Ruby есть хэши.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
aktuba
Дата 9.6.2012, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
Ну т.е. другими словами тебя просто поработила привычка работать мышкой. В таком случае ты можешь поставить IDE типа Rubymine и продолжать работать как привык, ища нужный пункт в меню, либо осваивать прелести консоли. Просто в винде консоль - дохлая, если без power shell то вообще ни о чём. А у пользователей MacOS X и GNU/Linux консоль - это основное рабочее окно.


RubyMine меня устраивает, хотя и в консоли (правда DOS), я в свое время поработал.

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
Ну так неудобно ведь! Не говоря уж о том, что такие проекты предоставляют только 1 вариант начального приложения. Тогда как проекты с генераторами начального приложения дают тебе гораздо больше свободы выбора.


Да как-раз наоборот - очень удобно. Что значит "1 вариант начального приложения" не совсем понял, но скорее всего имеется в виду, что нет возможности одной командой поставить кучу дополнений ). Если прав - нафиг не надо, т.к. часто либо в репах не последние версии, либо наоборот - последние, а нужны старые. Мне проще самому залить то, что надо и туда, куда мне удобно!

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
Ну правильно, привычка разработчиков. А заблуждение то где? Ведь это в первую очередь привычка разработчиков всех популярных веб-фреймворков.

Заблуждение в процентах. Далеко не 99% разработчиков используют объектную модель данных. В том-же php я считаю подобное злом, т.к. создает только дополнительный оверхед, не давая взамен никаких (т.е. абсолютно никаких) дополнительных возможностей или удобств.

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
Ну вот ты и сознался, что не используешь ООП.

Где? o_O Вообще-то, на работе я не программер, а вот свой код у меня только ООП - привычка из делфей осталась ;)

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
Основное заблуждение тут в том, что объекты что-то замедлили бы в вашем проекте, это не более чем самооправдание за плохой дизайн.

Ошибка. На данный момент мои программеры переписывают 2 проекта на новую платформу. Перед проектированием мы делали довольно обширные тесты. Результат - в вакууме (на hello world) объекты выигрывают по скорости, но проигрывают по объему. На реальных данных, в реальных условиях - объекты проигрывают по всем пунктам. В твоих словах видны лишь штампы, не проверенные ничем ;)

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
Я видел много крупных, нагруженных проектов, но ни в одном из них создание объектов или ORM не были узким местом.

Могу назвать минимум 1 проект, где ORM стал узким местом. Переписывание на plain-sql решило проблему в разы. Конечно-же, можно сказать, что не ORM стало узким местом в нагруженном проекте, а используемое железо, но ведь это будет ложь ;)

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
ORM - это по сути получение данных модели в изолированном классе.

Не-не-не... Не надо путать меня и других ;). ORM - это способ представления и работы с данными. И "класс" тут совсем не к месту. Более того - класса может не существовать вообще, если реализовать ORM на уровне драйвера к ЯП, например. ORM - это именно паттерн, с помощью которого пытаются превратить один тип данных в другой.

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
Если для каждой модели есть отдельный класс или экземпляр класса(O), в котором сосредоточена работа(M) с внешним реляционным хранилищем данных®, то имеет место ORM.

Ни разу не так... ORM - виртуальная прослойка(Model) между кодом(Object) и данными(Relational mapping). С чего-бы вдруг данные подразумевают под собой объектность - мне не понятно. Как уже говорилось - данные могут быть не только в базе, они могут вообще не существовать до момента необходимости в них.

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
Другими словами, если ты не используешь ActiveRecord, то это ещё не значит, что ты не используешь ORM. 

Не использую. Более того, я работаю с данными (в большинстве случаев) в том виде, в котором они представлены. Т.е, например, при работе с базой я работаю с таблицами и строками, при работе с документами - со страницами и т.д.

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
Посмотри, например, Sequel, совсем не похоже на ActiveRecord, но тоже ORM.

Смотрел, поэтому и выбрал mysql2 ;)

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
Могут быть проблемы с твоей т.з., но раз есть миллионы профессиональных разработчиков, которые не разделяют эту т.з., значит это сугубо субъективные проблемы.

Миллион мух не могут ошибаться? Ну да, ну да... А если серьезно, то миллионы разработчиков используют php и знать-не знают про ооп, orm, тесты и пр. Значит ли это, что проблема в профессиональных разработчиках? ) Да и проблем у меня нет, просто я не понимаю смысла в использовании orm где-то, кроме самых простых проектов.

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
Ну сотни мс - это хорошо, но фишка то в том, что отказом от ORM и 10 мс хрен выиграешь.

Повторюсь - в разы помогла смена orm на plain-sql. В цифрах примерно так: было 3 сервера с нагрузкой в 10-15%, осталось 2 с нагрузкой в 3-4%. Понимаю, что большая часть проблем в самой реализации orm в php, но все-же результат "на лицо", как говориться.

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
А личное представление об ORM из-за этого получилось искажённым.

Я выше просил - покажи пример, когда orm полезен. Когда он действительно даст какую-то производительность труда (ведь именно этим прикрываются абсолютно во всех постах про orm) и пр.

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
Писать "SELECT * FROM my_app_db.topics WHERE (deleted_at IS NULL) LIMIT 10" вместо Topic.active.limit(10) нет никакого смысла.

Почему это "нет смысла"? Во-первых, в запросе я вижу откуда и какие данные получаю, связи, условия. А ты в orm не видишь, что значит active даже. Это может быть поле в таблице, условие в коде или то и другое вместе. И чтобы это знать, надо либо помнить, либо искать в коде/в базе.

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
Если у тебя поменяются критерии активности топиков, то достаточно будет изменить одну строчку scope :active в модели, а не переписывать каждый раз все запросы на выборку топиков по всему проекту.

То ты говоришь про плохой дизайн, то вдруг у тебя меняются критерии данных... Ну ок, убедил - плюс orm в том, что вместо поиска по коду надо будет в 1-2-х местах поправить 1-2 строки. И ради этого плюса использовать всю обертку? Ну уж нет, спасибо.

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
Другой плюс, что запись Topic.active.limit(10) короче и читабельнее, т.к. не требует переключения контекста на другой ЯП (SQL - это ведь тоже ЯП, хоть и DSL). Проще говоря, нужна очень весомая причина, чтобы впихнуть строчку на SQL в код на другом языке.

Я выше уже ответил на это. Минус это для начинающих разработчиков, для проф - это плюс. Кроме того, для описания схемы orm необходимо знать связи, структуру и, самое главное, принцип работы базы. Часто более-менее сложный запрос можно оптимизировать, использую определенные ключи или доп.запросы/подзапросы. Через ORM этого сложно добиться. Еще пример - как получить данные из 2-х таблиц, которые никак не связанны между собой, но в условиях запроса участвуют? Включать в orm sql-выражения? )

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
А оправдано только в тех случаях, когда абстракция ORM затрудняет написание оптимального запроса, что бывает весьма редко по факту.

А еще, когда нужна скорость работы, например. Но я-то спрашивал другое - когда НЕ оправдано использовать plain-sql? Те плюсы, которые ты привел - это попытка объяснения когда оправдано использовать orm, а мне интересен другой момент ;) Если перефразировать: "sql не оправдано использовать, когда приходится часто менять критерии выборки данных". Но изменение критериев - редкий случай ;)

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
И даже в таких случаях предпочтительнее написать хранимую процедуру, чтобы не смешивать SQL-запросы и код в одну кучу.

Эмм... Сорри, конечно, но это уже какой-то диагноз... Что значит "не смешивать sql и код"? ORM берет данные не использую sql? Или то, что спрятали запросы - они перестали существовать? Я использую plain-sql как-раз по той причине, что хочу видеть и контроллировать процесс работы приложения.

Цитата(source777 @  9.6.2012,  13:56 Найти цитируемый пост)
В Ruby нет ассоциативных массивов, как в пыхе. В Ruby есть хэши. 

Разобрался, thx.

Это сообщение отредактировал(а) aktuba - 9.6.2012, 14:20


--------------------
user posted image
PM MAIL WWW Skype   Вверх
source777
Дата 11.6.2012, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(aktuba @  9.6.2012,  14:19 Найти цитируемый пост)
Заблуждение в процентах. Далеко не 99% разработчиков используют объектную модель данных.

Так я этого и не писал.. Я писал про 99% MVC-проектов. А MVC - это ООП паттерн.

Цитата(aktuba @  9.6.2012,  14:19 Найти цитируемый пост)
Могу назвать минимум 1 проект, где ORM стал узким местом. Переписывание на plain-sql решило проблему в разы.

Сами запросы при этом изменились по сравнению с теми, которые генерировал ORM? 
Если да, то проблема была не в ORM, а в кривых руках программистов, его применявших. Если нет, то никаких ускорений в разы быть не может.

Цитата(aktuba @  9.6.2012,  14:19 Найти цитируемый пост)
В твоих словах видны лишь штампы, не проверенные ничем ;)

Мои слова проверены личным опытом и профайлером.   smile 

Цитата(aktuba @  9.6.2012,  14:19 Найти цитируемый пост)
Во-первых, в запросе я вижу откуда и какие данные получаю, связи, условия. А ты в orm не видишь, что значит active даже. 

Тяжёлый случай  smile 
Ты даже наличие модели предметной области считаешь минусом. Хотя MVC по определению подразумевает, что никто кроме модели не знает откуда и какие данные она получает.

Цитата(aktuba @  9.6.2012,  14:19 Найти цитируемый пост)
То ты говоришь про плохой дизайн, то вдруг у тебя меняются критерии данных...

Требования меняются всегда. Это аксиома любого проекта с внешним заказчиком. Если дизайн затрудняет внесение изменений, то он плох.


Цитата(aktuba @  9.6.2012,  14:19 Найти цитируемый пост)
Часто более-менее сложный запрос можно оптимизировать, использую определенные ключи или доп.запросы/подзапросы. Через ORM этого сложно добиться.

Ну это конечно зависит от реализации ORM, но в целом неправда. Как я уже писал выше, случаи когда сложно написать оптимальный запрос с помощью ORM очень редки. И в этих случаях как раз оправдано применение raw SQL.

Цитата(aktuba @  9.6.2012,  14:19 Найти цитируемый пост)
Еще пример - как получить данные из 2-х таблиц, которые никак не связанны между собой, но в условиях запроса участвуют? 

1. Структуру БД тоже рефакторить надо периодически. А то ты своими примерами сейчас выдашь ещё и хреновый дизайн БД. ;)
2. Зависит от конкретной ситуации, от представления в СУБД до plain-SQL запроса в модели. Использовать ORM в 100% запросов также глупо как не использовать ORM совсем.

Цитата(aktuba @  9.6.2012,  14:19 Найти цитируемый пост)
Минус это для начинающих разработчиков, для проф - это плюс. 

Ну я не видел ещё ни одного проф. разработчика не пользующегося абстракциями, а вот новичков видел сотни. Так что всё наоборот. Необходимость изоляции деталей реализации приходит с опытом.

Цитата(aktuba @  9.6.2012,  14:19 Найти цитируемый пост)
Что значит "не смешивать sql и код"? ORM берет данные не использую sql?

Ну зачем дурачка то включать? Не смешивать sql и код, работающий с моделью. 

P.S. Пора закруглять оффтопик, каждый кулик волен оставаться в своём болоте. Я лишь хотел направить на Ruby-way, т.к. с твоими убеждениями успешно программировать на Ruby вряд ли получится. Это для тебя будет, что называется, роль на сопротивление.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
aktuba
Дата 11.6.2012, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Ну раз заканчиваем, тогда коротко:

Цитата(source777 @  11.6.2012,  02:08 Найти цитируемый пост)
А MVC - это ООП паттерн.

С чего-бы? index.php © + data.php (M) + view.php (V) - уже не MVC? Какая разница, что и как у них внутри, если MVC - это паттерн организации проекта, а не кода?

Цитата(source777 @  11.6.2012,  02:08 Найти цитируемый пост)
Сами запросы при этом изменились по сравнению с теми, которые генерировал ORM? 
Если да, то проблема была не в ORM, а в кривых руках программистов, его применявших. Если нет, то никаких ускорений в разы быть не может.

Конечно менялись, ради этого и отказались от orm. И нет, дело не в кривых руках программистов, а в кривых руках разработчиков ORM, который не позволял использовать фичи базы, использую только основной функционал. Почти во всех реализациях ORM дело обстоит так же.

Цитата(source777 @  11.6.2012,  02:08 Найти цитируемый пост)
Мои слова проверены личным опытом и профайлером.    

На простых запросах? )

Цитата(source777 @  11.6.2012,  02:08 Найти цитируемый пост)
Ты даже наличие модели предметной области считаешь минусом. Хотя MVC по определению подразумевает, что никто кроме модели не знает откуда и какие данные она получает.

Не-не-не, не правда )). У меня запросы в модели, полностью огорожены от приложения. И только модель знает про данные. Сама модель - плюс, а ORM (пока еще) - минус.

Цитата(source777 @  11.6.2012,  02:08 Найти цитируемый пост)
Требования меняются всегда. Это аксиома любого проекта с внешним заказчиком. Если дизайн затрудняет внесение изменений, то он плох.

Возможно поэтому мне и не понятно требование юзать orm. Я очень редко работаю на внешнего заказчика и еще реже меняются требования к проекту. Хотя нет, даже при таких аксиомах - orm лишний блок в приложении.

Цитата(source777 @  11.6.2012,  02:08 Найти цитируемый пост)
Ну я не видел ещё ни одного проф. разработчика не пользующегося абстракциями, а вот новичков видел сотни. Так что всё наоборот. Необходимость изоляции деталей реализации приходит с опытом.

Вот как-раз на моей практике все иначе. Проф.разработчики почти не пользуются orm (только когда достается код других людей). А новички, увидев верхушку айсберга, начинают использовать везде. И да, это приходит с опытом )))

Цитата(source777 @  11.6.2012,  02:08 Найти цитируемый пост)
Я лишь хотел направить на Ruby-way, т.к. с твоими убеждениями успешно программировать на Ruby вряд ли получится. Это для тебя будет, что называется, роль на сопротивление. 

Возможно. Но раз можно пользоваться plain-sql в ruby - все не так уж и плохо ;)


--------------------
user posted image
PM MAIL WWW Skype   Вверх
source777
Дата 14.6.2012, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(aktuba @  11.6.2012,  12:14 Найти цитируемый пост)
С чего-бы? index.php © + data.php (M) + view.php (V) - уже не MVC? 

Строго говоря, да. index.php - максимум тянет на FrontController, а для полной реализации MVC этого маловато.
Хотя смотри, как забавно получается... MVC ты готов трактовать гибко, хотя это достаточно конкретный паттерн, хоть и с приличным кол-вом интерпретаций. А ORM, которая является лишь техникой работы с БД, ты трактуешь в очень узких рамках библиотечных реализаций.

Цитата(aktuba @  11.6.2012,  12:14 Найти цитируемый пост)
а в кривых руках разработчиков ORM, который не позволял использовать фичи базы, использую только основной функционал.

Ну вот ты и сформулировал границы применимости ORM: использовать его для всех запросов, для которых не нужны фичи СУБД, несовместимые со стандартом ANSI SQL, которые не поддерживаются ORM из коробки. С этим я полностью согласен, но как я писал выше, нестандартных запросов, как правило, очень мало. 

Цитата(aktuba @  11.6.2012,  12:14 Найти цитируемый пост)
На простых запросах? )

Ты так пишешь, как будто каждый второй запрос сложный. Сложных - от силы 2-3%, остальное - это довольно банальные запросы (тут главное не путать сложные и длинные ;). Если в проекте каждый десятый или ещё больше запросов полагается на специфичные для СУБД фичи, то я склонен считать, что в дизайне БД есть серьёзные проблемы. Сложные запросы я сам пишу на SQL, но необходимость в них возникает крайне редко.

Цитата(aktuba @  11.6.2012,  12:14 Найти цитируемый пост)
Не-не-не, не правда )). У меня запросы в модели, полностью огорожены от приложения. И только модель знает про данные. Сама модель - плюс, а ORM (пока еще) - минус.

Ну тут уже вопрос определений. Лично я считаю модель, изолирующую все запросы от остального приложения, реализацией ORM. Разница только в том, будет у неё базовый класс для распространённых запросов, либо нет.



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
aktuba
Дата 14.6.2012, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Цитата(source777 @  14.6.2012,  12:04 Найти цитируемый пост)
Строго говоря, да. index.php - максимум тянет на FrontController, а для полной реализации MVC этого маловато.

Эмм... А с каких пор MVC зависит от типа контроллера? Строго - как раз моя схема полностью MVC ;)

Цитата(source777 @  14.6.2012,  12:04 Найти цитируемый пост)
Хотя смотри, как забавно получается... MVC ты готов трактовать гибко, хотя это достаточно конкретный паттерн, хоть и с приличным кол-вом интерпретаций.

Я привел вполне конкретный пример правильного MVC, все остальное - расширение стандартной схемы. Впервые MVC была описана в 1979-м году, когда ООП не было и в природе-то ;)

Цитата(source777 @  14.6.2012,  12:04 Найти цитируемый пост)
А ORM, которая является лишь техникой работы с БД, ты трактуешь в очень узких рамках библиотечных реализаций.

ORM = Object-relational mapping, т.е. принцип отображения данных на объекты. Все верно? Т.е., берем данные в одном (плоском) формате и делаем из них объекты. При чем тут библиотечные реализации? Мне не понятна мода на постоянное конвертирования данные-объект-данные.

Цитата(source777 @  14.6.2012,  12:04 Найти цитируемый пост)
Ну вот ты и сформулировал границы применимости ORM: использовать его для всех запросов, для которых не нужны фичи СУБД, несовместимые со стандартом ANSI SQL, которые не поддерживаются ORM из коробки. С этим я полностью согласен, но как я писал выше, нестандартных запросов, как правило, очень мало.

Да это как-раз понятно. Не понятно, когда полезен ORM. Честно - не понятно. Плюсов ведь, кроме рефакторинга (да и то, ограниченного) нет, на мой взгляд.

Цитата(source777 @  14.6.2012,  12:04 Найти цитируемый пост)
Ты так пишешь, как будто каждый второй запрос сложный.

Основные запросы, чаще всего, либо составные, либо сумма простых. В первом случае ORM вреден, во втором бесполезен. Так для чего тогда? Хотя нет, для второго случая возможно будет безвреден, если запросы не критичны по скорости выполнения. Но вот засада - простые запросы делают тогда, когда нужна или скорость выполнения запросов, или распределенность данных физически (т.е., когда join не возможен). И в том, и в другом случае - ORM вреден.

Цитата(source777 @  14.6.2012,  12:04 Найти цитируемый пост)
Если в проекте каждый десятый или ещё больше запросов полагается на специфичные для СУБД фичи, то я склонен считать, что в дизайне БД есть серьёзные проблемы.

Если до оптимизации - согласен. С другой стороны, те же фичи помогают ускорить работу приложения. Ну а перевод ORM на использование handle socket, например, я даже представить не могу, если честно. И да, я часто использую нормализацию данных, хотя и считаю, что это не совсем правильно. Советую почитать интервью с Олегом Буниным в хакере за июнь этого года. Там много правильного сказано как-раз про дизайн базы.

Цитата(source777 @  14.6.2012,  12:04 Найти цитируемый пост)
Лично я считаю модель, изолирующую все запросы от остального приложения, реализацией ORM.

С чего вдруг? ) У меня работа идет с массивами данных (в основном), объектами и не пахнет. И да, у меня модель не знает о связях внутри базы, ее задача - получить запрос и отдать данные/выполнить действия. Это не ORM ни разу ;)

Цитата(source777 @  14.6.2012,  12:04 Найти цитируемый пост)
Разница только в том, будет у неё базовый класс для распространённых запросов, либо нет.

А при чем тут вообще базовый класс? o_O

Вообще, меня удивили несколько моментов в этом диалоге:
1. Ты все завязываете на ООП. Даже если язык полностью ООП - остальные компоненты могут быть не ООП и пытаться их привести к ООП-виду, на мой взгляд, ошибка. Например, MVC - архитектурное решение по построению приложения. По сути, это сумма 3-х компонентов, имеющих между собой низкую связанность. При чем тут ООП?
2. Говоря ORM ты в 100% случаев имеете в виду базу данных. И это я "трактую ORM в очень узких рамках библиотечных реализаций" )). ORM - принцип представления данных в виде объектов. Нет в этом определении ни слова про базы, верно? Для пример, могу набросать ORM для curl ;)
3. Удивляет совместимость опыта и наивности. Возможно я все-таки "не дорос" до ORM. Но если мне реально будет удобно работать с объектами, а не с данными - я выберу mongodb, например. С другой стороны, если проект простой и нагрузка будет не значительной - возможно и есть смысл юзать ORM. Надо обдумать, в общем )
4. Конечно, удивило твое терпение. Честно.



--------------------
user posted image
PM MAIL WWW Skype   Вверх
source777
Дата 15.6.2012, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(aktuba @  14.6.2012,  12:55 Найти цитируемый пост)
Я привел вполне конкретный пример правильного MVC, все остальное - расширение стандартной схемы. Впервые MVC была описана в 1979-м году, когда ООП не было и в природе-то ;)

C MVC вообще ситуация сложная. В эту аббревиатуру входит огромное число схожих, но существенно разных паттернов. Т.е. если уж совсем строго, то примера правильного MVC в природе не существует, т.к. нет консенсусного мнения о том, что именно считать эталонным образцом MVC. 
MVC образца 1979-го года в веб-программировании конечно не применяется, применяются его потомки. А ООП было, Smalltalk гораздо раньше появился. Впрочем, это вообще не суть важно  smile 

Цитата(aktuba @  14.6.2012,  12:55 Найти цитируемый пост)
Ты все завязываете на ООП.

Ну мы как бы в подфоруме о Ruby. А в Ruby всё завязано на ООП.

Цитата(aktuba @  14.6.2012,  12:55 Найти цитируемый пост)
ORM - принцип представления данных в виде объектов. Нет в этом определении ни слова про базы, верно? 

В этом нет, но это определение к ORM не имеет ни малейшего отношения, оно больше похоже на одну из базовых идей ООП, чем на определение ORM. 
ORM - это техника работы с реляционными базами данных из объектно-ориентированной программы, заключающаяся в отображении данных из реляционной базы данных (и ничего другого, curl не катит) на объекты. А что касается Ruby, то тут и хэши, и массивы, и строки, и числа, всё есть объекты, т.е. как ты ни увиливай, а всё равно получится ORM.  smile 

Цитата(aktuba @  14.6.2012,  12:55 Найти цитируемый пост)
Но если мне реально будет удобно работать с объектами, а не с данными - я выберу mongodb, например.

Попробуй. Не всё так просто...


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
aktuba
Дата 15.6.2012, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Цитата(source777 @  15.6.2012,  01:24 Найти цитируемый пост)
C MVC вообще ситуация сложная. В эту аббревиатуру входит огромное число схожих, но существенно разных паттернов. Т.е. если уж совсем строго, то примера правильного MVC в природе не существует, т.к. нет консенсусного мнения о том, что именно считать эталонным образцом MVC. 

Это уже интересно. А что еще входит в MVC, помимо Model-View-Controller?

Цитата(source777 @  15.6.2012,  01:24 Найти цитируемый пост)
Ну мы как бы в подфоруме о Ruby. А в Ruby всё завязано на ООП.

Ну так дальше-же написано - MVC (Model-View-Controller) никак не связанно с ООП. Говорилось в этом ключе ;)

Цитата(source777 @  15.6.2012,  01:24 Найти цитируемый пост)
В этом нет, но это определение к ORM не имеет ни малейшего отношения, оно больше похоже на одну из базовых идей ООП, чем на определение ORM. 

Да ладно? "Object-relational mapping (ORM, O/RM, and O/R mapping) in computer software is a programming technique for converting data between incompatible type systems in object-oriented programming languages." - это из википедии.

Цитата(source777 @  15.6.2012,  01:24 Найти цитируемый пост)
ORM - это техника работы с реляционными базами данных из объектно-ориентированной программы, заключающаяся в отображении данных из реляционной базы данных (и ничего другого, curl не катит) на объекты.

А это уже реализация orm. То, что orm больше всего прижилось в базах данных (что не удивительно), не значит, что orm только на них и завязано. Или, по-твоему, если у меня все данные находятся в обычных файлах, но я реализовал обертку, которая превращает данные из файлов в объекты и позволяет с ними полноценно работать - уже не orm? ;)

Цитата(source777 @  15.6.2012,  01:24 Найти цитируемый пост)
А что касается Ruby, то тут и хэши, и массивы, и строки, и числа, всё есть объекты, т.е. как ты ни увиливай, а всё равно получится ORM.

Неа, не получится. Данные-то все-равно плоскими остаются ;)



--------------------
user posted image
PM MAIL WWW Skype   Вверх
source777
Дата 17.6.2012, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(aktuba @  15.6.2012,  00:57 Найти цитируемый пост)
Это уже интересно. А что еще входит в MVC, помимо Model-View-Controller?

Ничего. Но нет единого понимания, что должна делать каждая из этих составляющих. Например, наиболее популярная интерпретация считает что контроллеры должны быть тонкими, а модели жирными. А ты считаешь наоборот. Можно сказать, что твой подход - не MVC, а можно сказать, что это другая реализация паттерна. В зависимости от одно- или двунаправлености связей между M,V,C можно ещё выделить несколько паттернов.. и т.д. и т.п... некоторые реализации удостаиваются даже отдельных аббревиатур типа MVP, MVVM, HMVC. Но академической точки зрения в этом вопросе как не было, так и нет.


Цитата(aktuba @  15.6.2012,  00:57 Найти цитируемый пост)
"Object-relational mapping (ORM, O/RM, and O/R mapping) in computer software is a programming technique for converting data between incompatible type systems in object-oriented programming languages." - это из википедии.

Ну википедия, в данном случае, не лучший proof-link. Не хватает ссылки на автора этого определения.
Да и вся последующая статья про базы данных и SQL. Судя по всему имеет место просто неудачная правка определения, изначально там было 
Цитата

Object-relational mapping (ORM, O/RM, and O/R mapping) in computer software is a programming technique for converting data between incompatible type systems in relational databases and object-oriented programming languages. (с)



Цитата(aktuba @  15.6.2012,  00:57 Найти цитируемый пост)
 Или, по-твоему, если у меня все данные находятся в обычных файлах, но я реализовал обертку, которая превращает данные из файлов в объекты и позволяет с ними полноценно работать - уже не orm? ;)

Да, я считаю, что это не ORM. И де-факто отрасль так считает.. посмотреть хоть списки популярных ORM реализаций.. все работают с реляционными базами данных.
Причём, если посмотреть к примеру на майкрософтский LINQ, то он работает с произвольными источниками данных, но в списке ORM встречается только LINQ to SQL.
Почему LINQ to XML не считается реализацией ORM по мнению той же википедии, на которую ты ссылался?

Цитата(aktuba @  15.6.2012,  00:57 Найти цитируемый пост)
Неа, не получится. Данные-то все-равно плоскими остаются ;)

Ну да ладно, возможно в твоих моделях не будет связей с другими моделями, тогда действительно будет не совсем ORM, а чёрти что и с боку бантик.  Но в этом случае в целом слоя предметной области как такового не будет. 


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2283 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.