Реализация отношений между связанными объектами

Nicki

Новичок
Создание связанных объектов, инкапсулированных друг в друге

Вопрос собствнно говоря нуба. Не пинайте сильно - просто разобраться немного хочу. Вот к примеру есть таблицы Покупатели, Заказы, Товары. Хочется с ними работать объектной моделью. Для этого у нас есть объекты Покупатель, Заказ и Товар. В объекте Покупатель хранится хэш объектов Заказ (по объекту на каждый заказ покупателя), а в объекте Заказ хранится хеш объектов Товар.

Теперь... регистрация, удаление, правка данных покупателя это один маппер. Добавление, правка заказа, выполнение заказа это второй маппер. С товарами тоже самое - категории товаров, перемещение, добавление, правка товаров - третий маппер. Так получается или я не прав?

А вот как быть, если нужно создать объект Покупатель, и не один объект, а некое множество, причем с загруженными в них объектами заказов. Это чья логика? Тут ведь идет загрузка их нескольких таблиц, создаются разные объекты (Покупатель, Заказ, Товар), их нужно как-то "разложить" друг в друга. Это логика уже еще одного маппера или все того же Покупателя, или совместная... а может отдельного объекта? Я знаю про такие системы, как, например, Доктрин, позволяющие реализовать загрузку связанных данных и собрать их в объекты с минимумом запросов к БД. Но если оставить такие системы в стороне, как это реализуется?
 

zerkms

TDD infected
Команда форума
маппер смотрит в схему объекта и всё что можно и нужно - выгребает 1 запросом. далее по полученным данным создаёт объекты.
 

Nicki

Новичок
А что значит "смотрит в схему объекта"? И на счет мапперов Покупатель, Заказ и Товар - они нужны? Или это опять таки все одним маппером делается?
 

zerkms

TDD infected
Команда форума
это значит, что поля объектов и их отношения хранятся в определённом виде. как-то так (кусок описания сущности news, mzz):

PHP:
protected $map = array(
        'id' => array(
            'accessor' => 'getId',
            'mutator' => 'setId',
            'options' => array(
                'pk', 'once',
            ),
        ),
        'title' => array(
            'accessor' => 'getTitle',
            'mutator' => 'setTitle',
            'options' => array(
                'i18n',
            ),
        ),
        'editor' => array(
            'accessor' => 'getEditor',
            'mutator' => 'setEditor',
            'relation' => 'one',
            'foreign_key' => 'id',
            'mapper' => 'user/userMapper'
        ),
        'text' => array(
            'accessor' => 'getText',
            'mutator' => 'setText',
            'options' => array(
                'i18n',
            ),
        )
    );
из него видно, что по полю editor сущность news соединена с сущностью user (news.editor = user.id)
 

Nicki

Новичок
Автор оригинала: zerkms
из него видно, что по полю editor сущность news соединена с сущностью user (news.editor = user.id)
Значит создание объекта Юзер будет передано мапперу userMapper, по полученным данным из результатов запроса?
 

zerkms

TDD infected
Команда форума
Nicki
нет :)
есть базовый класс mapper, от которого наследуются частные. например newsMapper. но в этом вопросе это уточнение незначащее. так вот: class mapper генерит запрос по схеме. в итоговой выборке получаются данные двух объектов. затем эту выборка передаётся newsMapper и userMapper. каждый из которых берёт лишь необходимые объёмы данных, на основе которых строит объект(ы). после этого mapper собирает всё это дело в кучу...

вообще процесс маппинга достаточно сложный, чтобы просто так вот объяснять его на пальцах.
 

Nicki

Новичок
Да, довольно сложно сразу понять... но в общих чертах что-то проясняется. А можно пример кода по сбору этого дела в кучу увидеть? :)

-~{}~ 04.04.09 11:47:

Люди, подскажите пожалуйста, где можно об этом подробно почитать, примеры увидеть? Может в книге какой или онлайн публикациях? Подскажите пожалуйста.
 

Nicki

Новичок
Мне бы подробнее надо. Где об этом почитать можно?
 

zerkms

TDD infected
Команда форума
хз, не видел. но он написан на весьма простом и доступном английском.
 

Nicki

Новичок
да дело в том что с англиским совсем туговато.... попробую конечно. спасибо тебе большое! может еще где об этом написано, может с примерами не на пхп а на java?

И как вообще называется эта тама, чтоб знать о чем искать? ORM?
 

Nicki

Новичок
Задать правильное напрвавление - это очень важно. Огромное тебе спасибо! Ты мне здорово помог! Всего хорошего тебе!))
 

Духовность™

Продвинутый новичок
Nicki
вот кишки ещё
http://www.ozon.ru/context/detail/id/1616782/
http://www.sprinter.ru/books/1867742.html

сложны для понимания, но читать стоит
 

Nicki

Новичок
спасибо)))

-~{}~ 04.04.09 16:06:

у меня они кстати есть. и одна и вторая. не подскажшь в каких именно главах есть информация по интерисующей меня теме?
 
Сверху