Писать качественный кодж и говнокод — это почти одинкаковые затраты. Вы наверно путаете overengineering с качественным преоктирование. Качественное проектирование позволяет делать большее меньшим количеством строк. Особенно это будет заметно, если захотите значителньо изменить структуру. Хорошо организованый код надо будет либо донастроить, говнокод — переписать.
Забегу вперед и опишу как содается модель в RedBeanPHP.
В начале вы работаете с bean, без привлечения моделей. Когда вам нужна модель, вы создаете класс вида Model_BeanName, в нашем случае Model_User, и там описываете дополнительную логику. Связывание bean и модели происходит автоматически.
То есть:
Данная статья только первая в цикле из 3 частей, описыващая только самые базовые вещи.
" И опять же странно почему нет такой простой вещи как namespace, вроде уже «немодно» давно писать MyClass_Is_Here"
Тут я отвечу переводом раздела PHP 5.3 namespaces на официфльном сайте.
«Я не люблю PHP namespaces, они имеют некоторые проблем. Есть ряд причин почему я не использую namespace в RedBeanPHP.
Я хочу оставить совместимость с 5.2.
Я не хочу заставлять пользователей использовать namespace, схема с синголтоном R::doSomething() достаточно мощная
Хотя я ценю работу команды PHP, я считаю выбор символа \ ошибкой. Это как эхо MSDOS в PHP.
Мне кажется, чем меньше синтаксических конструкций, тем лучше.
В начале вы работаете с bean, без привлечения моделей. Когда вам нужна модель, вы создаете класс вида Model_BeanName, в нашем случае Model_User, и там описываете дополнительную логику. Связывание bean и модели происходит автоматически.
То есть:
$user = R::dispence('user');
$user->modelMethod();
То есть, начинаем с ActiveRecord, и при необходимости расширяемся до моделей. Мы всегда работаем по одной схеме.
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 я опишу в второй части.
http://en.wikipedia.org/wiki/Active_record_pattern
http://habrahabr.ru/post/150023/#comment_5079253
Из приведенной ссылки:
This pattern is commonly used by object persistence tools, and in object-relational mapping (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);
ORM поддерживает SQL запросы.
R::exec( 'update page set title=«test» where id=1' );
Так же присуствует построитель запросов:
R::$f->begin()
->select('*')->from('bean')
->where(' field1 =? ')->put('a')->get('row');
Возможно это будет ответом на ваше замечание.
Сам автор верит, ORM работает настолько быстро, насколько правильно вы позволяете это ей делать.
" И опять же странно почему нет такой простой вещи как namespace, вроде уже «немодно» давно писать MyClass_Is_Here"
Тут я отвечу переводом раздела PHP 5.3 namespaces на официфльном сайте.
«Я не люблю PHP namespaces, они имеют некоторые проблем. Есть ряд причин почему я не использую namespace в RedBeanPHP.
Я хочу оставить совместимость с 5.2.
Я не хочу заставлять пользователей использовать namespace, схема с синголтоном R::doSomething() достаточно мощная
Хотя я ценю работу команды PHP, я считаю выбор символа \ ошибкой. Это как эхо MSDOS в PHP.
Мне кажется, чем меньше синтаксических конструкций, тем лучше.