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

  • Автор темы Автор темы Nicki
  • Дата начала Дата начала

Nicki

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

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

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

А вот как быть, если нужно создать объект Покупатель, и не один объект, а некое множество, причем с загруженными в них объектами заказов. Это чья логика? Тут ведь идет загрузка их нескольких таблиц, создаются разные объекты (Покупатель, Заказ, Товар), их нужно как-то "разложить" друг в друга. Это логика уже еще одного маппера или все того же Покупателя, или совместная... а может отдельного объекта? Я знаю про такие системы, как, например, Доктрин, позволяющие реализовать загрузку связанных данных и собрать их в объекты с минимумом запросов к БД. Но если оставить такие системы в стороне, как это реализуется?
 
маппер смотрит в схему объекта и всё что можно и нужно - выгребает 1 запросом. далее по полученным данным создаёт объекты.
 
А что значит "смотрит в схему объекта"? И на счет мапперов Покупатель, Заказ и Товар - они нужны? Или это опять таки все одним маппером делается?
 
это значит, что поля объектов и их отношения хранятся в определённом виде. как-то так (кусок описания сущности 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)
 
Автор оригинала: zerkms
из него видно, что по полю editor сущность news соединена с сущностью user (news.editor = user.id)
Значит создание объекта Юзер будет передано мапперу userMapper, по полученным данным из результатов запроса?
 
Nicki
нет :-)
есть базовый класс mapper, от которого наследуются частные. например newsMapper. но в этом вопросе это уточнение незначащее. так вот: class mapper генерит запрос по схеме. в итоговой выборке получаются данные двух объектов. затем эту выборка передаётся newsMapper и userMapper. каждый из которых берёт лишь необходимые объёмы данных, на основе которых строит объект(ы). после этого mapper собирает всё это дело в кучу...

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

-~{}~ 04.04.09 11:47:

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

И как вообще называется эта тама, чтоб знать о чем искать? ORM?
 
Задать правильное напрвавление - это очень важно. Огромное тебе спасибо! Ты мне здорово помог! Всего хорошего тебе!))
 
Nicki
вот кишки ещё
http://www.ozon.ru/context/detail/id/1616782/
http://www.sprinter.ru/books/1867742.html

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

-~{}~ 04.04.09 16:06:

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