Как стать автором
Обновить

Комментарии 47

Расскажите еще какие возможно фишки 5.3 или 5.4 используются если они есть, а то пока что единственный интересный момент который я увидел это работа со связами — crud, конечно стартовый файл в 260Кб это по-моему перебор. И опять же странно почему нет такой простой вещи как namespace, вроде уже «немодно» давно писать MyClass_Is_Here. А так ничего интересного как-то, давно был обзор netty вот он поинтересней оказался немного.
… принеся в жертву быстродействие..

Вот это очень настораживает. Переключение режимов это хорошо, но есть ли реальные цифры сравнения или тесты? (желательно для двух режимов)
Таких тестов я не проводил. Некоторая информация есть на сайте RedBean Performance

Сам автор верит, ORM работает настолько быстро, насколько правильно вы позволяете это ей делать.
Я ответил вам ниже.
Нет, здесь нет никаких проблем. После R::freeze(true); остаются лишь нужные для вставки/чтения/апдейтов запросы, ничего лишнего. Другое дело, что это всегда чтение строки целиком и такая же запись.

Без фриза он постоянно использует describre, show tables и прочее. Это нужно ему для изменения схемы БД на ходу.
Данная статья только первая в цикле из 3 частей, описыващая только самые базовые вещи.

" И опять же странно почему нет такой простой вещи как namespace, вроде уже «немодно» давно писать MyClass_Is_Here"

Тут я отвечу переводом раздела PHP 5.3 namespaces на официфльном сайте.

«Я не люблю PHP namespaces, они имеют некоторые проблем. Есть ряд причин почему я не использую namespace в RedBeanPHP.

Я хочу оставить совместимость с 5.2.
Я не хочу заставлять пользователей использовать namespace, схема с синголтоном R::doSomething() достаточно мощная
Хотя я ценю работу команды PHP, я считаю выбор символа \ ошибкой. Это как эхо MSDOS в PHP.
Мне кажется, чем меньше синтаксических конструкций, тем лучше.

эхо MSDOS
В Windows оно до сих пор так…
Не использовать namespace и фишки 5.3-5.4 даже в будущем это ппц. Думаю проект не выживет, т.к. ничего нового он не показал, все как-то сделано «для себя», ну и конечно объяснения вида «не буду делать потому что не хочу и не нравиться» это конечно круто. Идею с «bean» я видел в sugarCRM там сделана получше конечно эта идея(про код молчу). 5.2 Уже не используется наверное год как, ну не поддерживается, поэтому думаю данный фв так и останется поделкой для себя, увы и ах.
>5.2 Уже не используется наверное год как
С чего бы? Все резко переписали старые приложения? Или помолясь обновили софт на старых серверах?
Я сказал не поддерживается (не разрабатывается дальше), посмотрите на php.net, не надо передергивать мои слова, ясно?
Ясно, сэр.
Мне кажется автору ОРМа, надо бы выполнить var_dump(get_declared_classes()) с использованием неймспейсов и без, чтобы понять, что неймспейсы это не просто синтаксическая конструкция.

А еще статичный вызов функций не просто не «мощный», а отстойный, потому что добавляет статической связанности компонентам системы.
>А еще статичный вызов функций не просто не «мощный», а отстойный, потому что добавляет статической связанности компонентам системы.

+миллиард

надоели со своими синглтонами.
будет разделено на 2 расти

Опечатка в первом абзаце.
Только в первом?) Автор, лови в личку (письмо, — не подумайте).
НЛО прилетело и опубликовало эту надпись здесь
Очень милая ОРМочка, но, увы, неприменимая иначе как для развлечения.

Из принятой в ней схемы работы «прочитали запись целиком, апдейтнули запись целиком» следует две проблемы:
  1. Избыточность запросов и трафика: нельзя обновить один столбец, можно обновить лишь строку целиком. При большой нагрузке это становится довольно ощутимым питфоллом.
  2. Race conditions. Это полный ахтунг, комментарии излишни, в общем-то.
Дополнил статью:

ORM поддерживает SQL запросы.

R::exec( 'update page set title=«test» where id=1' );

Так же присуствует построитель запросов:

R::$f->begin()
->select('*')->from('bean')
->where(' field1 =? ')->put('a')->get('row');

Возможно это будет ответом на ваше замечание.
Я чего-то не понял, или это ActiveRecord?

Это полноценный ORM.
В этом смысле ORM подмножество ActiveRecord.

Из приведенной ссылки:
This pattern is commonly used by object persistence tools, and in object-relational mapping (ORM).

Данный паттерн используеться средствами управления объектами, и ORM.
Формально это не ActiveRecord, в прошлом обсуждении на хабре признали DAO
В качестве флуда: то, что AR используется в ORM, не говорит о том, что он используется во всех ORM. Есть ORM и на других паттернах, та же Doctrine 2 например.
Из ссылки на вики:
The interface of an object conforming to this pattern would include functions such as Insert, Update, and Delete…
Насколько я знаю, здесь метода для INSERT/UPDATE/DELETE не принадлежат самому объекту, поэтому это и не Active Record.
Больше смахивает на DataMapper + Repository (на статических методах).
Очередной велосипед( Все фишки уже умеют все ORM'ы. Что нового?
Есть ли ORM в которой создание новой таблицы и новой записи сводиться к нескольким строкам?

require('rb.php');
$book = R::dispense( 'book' );
R::setup('mysql:host=localhost;dbname=mydatabase', 'user','password');
$book->title = 'Gifted Programmers';
$book->author = 'Charles Xavier';
$id = R::store($book);
и че store каждый проверяет наличие таблицы book? И если нет, то создает таблицу по указанным полям?

Да, такого нет, ибо это бред!
Проверяет или нет зависит от режима работы — fluid или frozen.
Может ли idiormandparis создавать структуру базы данных не лету?
Пример из приведенного фреймфорка:

class User extends Model {
}

$user = Model::factory('User')
->where_equal('username', 'j4mie')
->find_one();
$user->first_name = 'Jamie';
$user->save();

Аналогичный функционал на RedBeanPHP

$user = R::findRow('user',' username =? ',
array( 'j4mie' )
);
$user->first_name = 'Jamie';
R::store($user);

Как мы видим, в RedBeanPHP можно не описывать класс модели. О том, как создаются модели в RedBeanPHP я опишу в второй части.
В idiormandparis мы можем отказать от моделей так же, но в этом случае мы работаем с ActiveRecord.
Лично для меня использование моделей это скорее плюс, чем минус. Проще добавляются фильтры и связи. Визуально код воспринимается лучше.
Забегу вперед и опишу как содается модель в RedBeanPHP.

В начале вы работаете с bean, без привлечения моделей. Когда вам нужна модель, вы создаете класс вида Model_BeanName, в нашем случае Model_User, и там описываете дополнительную логику. Связывание bean и модели происходит автоматически.
То есть:

$user = R::dispence('user');
$user->modelMethod();

То есть, начинаем с ActiveRecord, и при необходимости расширяемся до моделей. Мы всегда работаем по одной схеме.
Даёшь ту же фишку в виде специального режима работы AcriveRecord в Yii!
Ходят слуши что в Yii 2 будет нечто подобное.
Какую ту же фишку?
Создание структуры БД на лету исходя из обращения к данным в коде.
Что-то не помню чтобы на конфе 19 мая такое говорили, можно пруф?
Вы топик читали?
Да, меня интересует пруф на вот это:
>>Ходят слуши что в Yii 2 будет нечто подобное.
где об этом говорили и кто? бабки у подъезда чтоли?
Вы задали мне вопрос «Какую ту же фишку? », а на самом деле хотели спросить у olegl84 про пруф?
Сформулируйте мысль точно и передайте её правильному адресату пожалуйста.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории