Картопостроитель данных и Отношения: Стратегии реализации?

Я почти закончил свой Картопостроитель Данных, но теперь я в точке, куда это приходит к отношениям.

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

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

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

В целом у меня есть метод получателя для каждых Отношений. Так в этом случае существует getAddress (Компания companyObject) метод. Это берет объект компании, ищет, это - свойство адреса и - если это является ПУСТЫМ - выбирает соответствующий Объект адреса от базы данных, с помощью класса Картопостроителя для того Объекта адреса (AddressDataMapper), и присваивает тот объект адреса свойству адреса указанного объекта компании.

Важный: Картопостроителю Данных позволяют использовать другой Картопостроитель Данных?

Позволяет говорят в большинстве случаев, что Вам нужны и объект компании И В объект адреса, потому что Вы всегда отображаете его в списке все вместе. В этом случае CompanyDataMapper не только выбирает объекты компании, но и делает SQL-запрос с СОЕДИНЕНИЕМ, чтобы также получить все поля объекта адреса. Наконец, это выполняет итерации по официальному набору документов и подает новые объекты с их соответствующими значениями, присваивая объект адреса объекту компании.

Звучит простым, до сих пор.

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

Как насчет них? Единственная разница для 1:1, что Компания может иметь многоадресные объекты. Позволяет взгляните: Когда мы большую часть времени только заинтересованы Компанией, Картопостроитель Данных просто установил бы свойство адресов объекта компании АННУЛИРОВАТЬ. Свойство адресов является массивом, который не может сослаться ни на один, один или несколько адресов. Но мы еще не знаем, так как мы загружаемся лениво, таким образом, это является просто ПУСТЫМ. Но что, если нам были бы нужны все адреса в большинстве случаев также? Если мы отобразили бы большой список со всеми компаниями вместе со всеми их адресами? В этом случае вещи начинают становиться действительно ужасными. Во-первых, мы не можем присоединиться к таблице адресов пятьдесят раз для каждого объекта адреса (я сильно полагаю, что это невозможно, и если бы это, производительность была бы ниже нуля). Так, когда мы думаем это далее в будущем, невозможно НЕ загрузиться лениво в этом случае.

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

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

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

У меня нет планов все же для контакта с такой проблемой.

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

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

21
задан openfrog 28 December 2009 в 22:03
поделиться

2 ответа

Я с нетерпением жду любых ответов, которые вы получите на эту тему, но в то же время, почему бы просто не перескочить на Amazon (или к вашему местному книжному дилеру) и, наконец, не купить

Эта книга содержит оригинальные шаблоны, на которые вы указывали в различных вопросах, и считается справочником по шаблонам проектирования и архитектуре программного обеспечения

.
3
ответ дан 29 November 2019 в 21:54
поделиться

Я тоже работаю над этой проблемой. Для начала я адаптировал шаблон Data Mapper из книги Мэтта Зандстры PHP Objects, Patterns, and Practice (2-е изд.). Теперь я вижу, что вышла новая редакция

. Возможно, самой гениальной частью установки являются объекты «Коллекции». Я не уверен, какой язык вы используете, поэтому избавлю вас от подробностей. Достаточно сказать, что PHP имеет интерфейс Iterator, который позволяет сначала загружать массив (карту на других языках) и преобразовывать необработанные данные в объекты (гидратировать?) На лету, во время цикла.

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

Мне очень не нравится «Ленивая загрузка», потому что она приводит к очень большому количеству запросов к базе данных. Мое перфекционистское чутье оскорбляет, когда я знаю, что я использую десятки или сотни запросов, чтобы выполнить их за один.

Я тоже с нетерпением жду дополнительных ответов.

0
ответ дан 29 November 2019 в 21:54
поделиться