ООП и наборы объектов

Stechkin

Guest
ООП и наборы объектов

Вот встал такой вопрос:

Есть у меня, скажем, БД, в которой хранятся записи о книгах.
Для работы с книгами я написал класс book

PHP:
class book 
{
     var $id;
     var $title;
     var $anons;

     function book($id=NULL)
    {
    // Если есть $id - то берем данные из базы
    // Если нет - то делаем новую запись в базе
    }

    function update_book
    {
    // Тут обновляю информацию о книге
    }

    function get_title()
    ....
    function set_title()
    ....
}
Вопрос вот в чем - а как удобнее работать с наборами книг? Например, мне надо постранично выдать все книги.

Если писать новый класс, например book_box, который работает с набором книг - то получится, что для каждого объекта book (при создании набора книг) будет идти обращение к БД.

Если же напрямую обращаться к базе типа SELECT * FROM books WHERE ... - то пропадает смысл вообще с классе book

Интересно кто каким образом такую штуку реализует?
 

DarkGool

Guest
Про ORM здесь хорошо написано
http://detail.phpclub.ru/download/jun2004/phpi4_2004.pdf
 

Alexandre

PHPПенсионер
надо учиться мыслить объектами,
по этому советую книгу "Применение UML и шаблонов проектирования" http://www.books.ru/shop/books/25832

есть много других хороштих книг на эту тему, например: Типичные ошибки проектирования http://www.books.ru/shop/search?search_type=+&query=%EE%F8%E8%E1%EA%E8+%EF%F0%EE%E5%EA%F2%E8%F0%EE%E2%E0%ED%E8%FF

или Рефакторинг и улучшение существующего кода
http://www.books.ru/shop/search?search_type=+&query=%F0%E5%F4%E0%EA%F2%EE%F0%E8%ED%E3
 

Domovoj

Guest
Re: ООП и наборы объектов

Вопрос вот в чем - а как удобнее работать с наборами книг? Например, мне надо постранично выдать все книги.

Если писать новый класс, например book_box, который работает с набором книг - то получится, что для каждого объекта book (при создании набора книг) будет идти обращение к БД.

Если же напрямую обращаться к базе типа SELECT * FROM books WHERE ... - то пропадает смысл вообще с классе book

Интересно кто каким образом такую штуку реализует?
Для себя я пока решил использовать следующий способ:
- статические factory методы для получения объекта или массива объектов, удовлетворяющих условиям (например, один метод на выборку по ID, другой - на поиск по названию, и т.д.);
- статичекие методы для записи объектов в базу и удаление их там;
- private метод для заполнения объекта на основе массива или аналогичного объекта (смотрю в чём MySQL-класс возварщает данные);
- public get/set методы;
- public методы особенные для объета.
- public методы для записи объекта в базу и удаления объекта (исползуют статические методы указанные выше).

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

На самом деле интересно было бы узнать опыт применения таких паттернов. Может я просто каких то тонкостей их применения не понял.

А насчёт Propel - туча классов + простота SQL теряется. То, что раньше можно было написать одной строкой, теперь кучей методов делается. На мой взгляд громоздко и неудобно.
 
Сверху