Data Mapper и взаимосвязи: стратегии реализации?

мы почти закончили мой Data Mapper, но теперь ям в том месте, где речь идет об отношениях.

Я постараюсь проиллюстрировать свои идеи здесь. Я не былне могу найти хорошие статьи / информацию по этой теме, так что, возможно, яя заново изобретаю колесо (наверняка, я мог бы просто использовать большой каркас - но я хочу научиться этому).

Отношения 1: 1

Во-первых, давайте посмотрим на отношения 1: 1. В общем, когда мыу нас есть класс домена под названием "Компания" и один называетсяАдрес"класс нашей компании будет иметь что-то вроде address_id. Допустим, в большинстве случаев мы просто отображаем список компаний, а адрес нужен только тогда, когда кто-то смотрит на детали. В этом случае мой Data Mapper (CompanyDataMapper) просто загружается лениво, что означает, что он просто извлечет этот address_id из базы данных, но не выполнит объединение для получения данных адреса.

В общем, у меня есть метод получения для каждого отношения. Так что в этом случаеметод getAddress (Company companyObject). Он берет объект компании, ищет егоадресное свойство и - если оно 's NULL - извлекает соответствующий объект Address из базы данных, используя класс Mapper для этого объекта Address (AddressDataMapper), и назначает этот объект адреса свойству address указанного объекта компании.

Важное замечание: разрешено ли Data Mapper использовать другой Data Mapper?

Допустим, в большинстве случаев вам нужен как объект компании, так и объект адреса, потому что вы всегда отображаете его в списке все вместе. В этом случае CompanyDataMapper не только выбирает объекты компании, но и выполняет запрос SQL с JOIN, чтобы также получить все поля объекта адреса. Наконец, он перебирает набор записей и передает новым объектам их соответствующие значения, назначая объект адреса объекту компании.

Звучит просто, пока.

Отношения 1: n

Как на счет этих? Единственное отличие от 1: 1 состоит в том, что Компания может иметь несколько объектов Address. Давайте посмотрим: когда мыВ большинстве случаев, интересующихся только Компанией, Data Mapper просто устанавливает для свойства адреса объекта компании значение NULL. Свойство address - это массив, который может ссылаться на один, несколько или несколько адресов. Но мы непока не знаю, так как мы загружаемся лениво, так чтопросто NULL. Но что, если нам понадобятся все адреса в большинстве случаев? Если бы мы отображали большой список со всеми компаниями вместе со всеми их адресами? В этом случае вещи начинают становиться действительно ужасными. Во-первых, мы можемя не могу присоединиться к таблице адресов пятьдесят раз для каждого объекта адреса (я твердо верю, что 'Это невозможно, и если это так, производительность будет ниже нуля). Итак, когда мы думаем об этом дальше, этоВ этом случае невозможно НЕ загружать лениво.

Важно: это правда? Должен ли я отправить 100 запросов, чтобы получить 100 адресных объектов, если у меня есть 10 компаний с каждыми 10 адресами?

Отношения m: n

Допустим, объект адреса содержит только страну, штат, город, дорогу и номер дома. Но один дом мог бы быть башней большого бизнеса с большим количеством компаний в них. Как одно из тех современных офисных зданий, где каждый может арендовать небольшую комнату, чтобы показать эту башню на своем веб-сайте. Итак: многие компании могут использовать один и тот же адрес.

У меня пока нет планов по решению этой проблемы.

Важно: вероятно, этоне большая проблема, чем отношения 1: n?

Если кто-то знает хороший ресурс, в котором подробно рассказывается о решении / реализации этого, я был бы рад ссылке!

Ответы на вопрос(3)

Ваш ответ на вопрос