Подтвердить что ты не робот

Модель табличного модуля и домена

Я спросил о выборе метода для хранения пользовательских профилей на днях и получил интересный ответ от David Thomas Garcia предлагая использовать шаблон проектирования табличного модуля. Похоже, это, вероятно, направление, которое я хочу принять. Все, с чем я столкнулся с Google, похоже, довольно дискуссионное обсуждение на высоком уровне, поэтому, если кто-нибудь может указать мне в сторону некоторых примеров или дать мне лучшее представление о задействованных гайках и болтах, это было бы потрясающе.

4b9b3361

Ответ 1

Лучшей ссылкой является "Шаблоны архитектуры корпоративных приложений" Мартина Фаулера:

Здесь выдержка из раздела в Табличном модуле:

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

Табличный модуль будет особенно полезен в гибкой архитектуре базы данных, которую вы описали для своих данных профиля пользователя, в основном Entity-Attribute-Value.

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

Вместо этого табличный модуль упрощает для вас логику кода, которая применяется к нескольким строкам в таблице базы данных. Если вы создадите профиль для данного пользователя, вы должны указать все эти свойства, а класс Table Module будет иметь код для перевода в ряд операторов INSERT, по одной строке для каждого свойства.

$table->setUserProfile( $userid, array('firstname'=>'Kevin', 'lastname'=>'Loney') );

Аналогично, запрос к заданному профилю пользователя будет использовать модуль таблицы для сопоставления нескольких строк набора результатов запроса с объектами-членами.

$hashArray = $table->getUserProfile( $userid );